Android   发布时间:2022-04-28  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了Clojure android无法读取文件大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
我正在尝试使用clojure创建一个简单的 Android应用程序,该应用程序读取csv文件并允许用户执行像数据搜索一样的正则表达式.问题是当我尝试读取数据时,我得到以下异常.

IllegalArgumentexception没有方法的实现:: make-reader of protocol:#’clojure.java.io / IOFactory for class:nil clojure.core / -cache-protocol-fn(core_deftype.clj:554)

我的研究表明,这通常意味着clojure正在寻找某些东西而无法找到它.但我无法弄清楚它可能是什么或为什么.

这是抛出异常的Clojure代码

(ns org.stuff.events.data
  (:require [clojure.java.io :as io]))

(def data-file (io/file (io/resource "kamus.csv")))

(defn read-data [_]
  (slurp data-filE))

从最好的我可以告诉“kamus.csv”在正确的目录中,所以我不认为这是它.如果我在repl中评估数据文件,我会得到nil.

有人有任何想法来解决我的问题吗?

以下是其他项目文件仅供参

@H_873_5@main.clj:

(ns org.stuff.events.main
    (:require [neko.activity :refer [defactivity set-content-view!]]
              [neko.debug :refer [*a]]
              [neko.notify :refer [toast]]
              [neko.ui :refer [con@L_801_10@]]
              [neko.resource :as res]
              [neko.find-view :refer [find-view]]
              [neko.threading :refer [on-ui]]
              [org.stuff.events.data :as data]
              [clojure.data.csv :as csv])
    (:import android.widget.TextView))

;; We execute this function to import all subclasses of R class. This gives us
;; access to all application resources.
(res/import-all)



(def lisTing (atom ""))


(defn get-elem [activity id]
  (str (.getText (find-view activity id))))

(defn set-elem [activity id s]
  (on-ui (con@L_801_10@ (find-view activity id) :text s)))

(defn add-event [activity]
  (swap! lisTing str (get-elem activity ::search-Box) "\n")
  (set-elem activity ::results @lisTing))


(defn main-layout [activity]
  [:linear-layout {:orientation :vertical}
   [:linear-layout {:orientation :horizontal                
                     :layout-height :wrap}
         [:edit-text {:id ::search-Box
                      :hint "cari..."
                      :layout-width :fill}]
         [:button {:text "Cari"
                   :on-click (fn [_] (add-event (*a)))}]]
   [:text-view {:text @lisTing
                :id ::results}]])


;; This is how an Activity is defined. We create one and specify its onCreate
;; method. Inside we create a user interface that consists of an edit and a
;; button. We also give set callBACk to the button.
(defactivity org.stuff.events.MainActivity
  :key :main

  (onCreate [this bundle]
    (.superOnCreate this bundlE)
    (neko.debug/keep-screen-on this)
    (on-ui
      (set-content-view! (*a)  (main-layout (*a))))))

project.csj:

(defproject events/events "0.1.0-SNAPSHOT"
  :description "FIXME: Android project description"
  :url "http://example.com/FIXME"
  :license {:name "Eclipse Public License"
            :url "http://www.eclipse.org/legal/epl-v10.html"}

  :global-vars {*warn-on-reflection* truE}

  :source-paths ["src/clojure" "src"]
  :res-path "src/main/resources"
  :java-source-paths ["src/java"]
  :javac-options ["-target" "1.6" "-source" "1.6" "-Xlint:-options"]
  :plugins [[lein-droid "0.4.3"]]

  :dependencies [[org.clojure-android/clojure "1.7.0-r2"]
                 [neko/neko "4.0.0-alpha5"]
                 [org.clojure/data.csv "0.1.3"] ]
  :profiles {:default [:dev]

             :dev
             [:android-common :android-user
              {:dependencies [[org.clojure/tools.nrepl "0.2.10"]]
               :target-path "target/debug"
               :android {:aot :all-with-unused
                         :rename-manifest-package "org.stuff.events.debug"
                         :manifest-options {:app-name "EventsLisTing      (debug)"}}}]
             :release
             [:android-common
               {:target-path "target/release"
               :android
               {;; :keystore-path "/home/user/.android/private.keystore"
                ;; :key-alias "mykeyalias"
                ;; :sigalg "MD5withRSA"

                :ignore-log-priority [:debug :verbose]
                :aot :all
                :build-type :releasE}}]}

  :android {;; Specify the path to the Android SDK directory.
            :sdk-path "C:\\Users\\fhard\\ApPDAta\\Local\\Android\\sdk"

            ;; Try increasing this value if Dexer fails with
            ;; OutOfMemoryException. Set the value according to your
            ;; available RAm.
            :dex-opts ["-JXmx4096M" "--incremental"]

            :target-version "15"
            :aot-exclude-ns ["clojure.parallel" "clojure.core.reducers"
                         "cider.nrepl" "cider-nrepl.plugin"
                             "cider.nrepl.middleware.util.java.parser"
                             #"cljs-tooling\..+"]})

解决方法

从例外情况来看,根据 this answer看起来你的路径错了.当我尝试用io / resource打开一个文件时,即使文件实际存在,我也会得到同样的错误. io/reader可能更容易使用,因为它会将您的输入强制转换为读者对象.另一方面,io / resource返回一个URL,其路径在jar内部发生变化. @L_674_22@

大佬总结

以上是大佬教程为你收集整理的Clojure android无法读取文件全部内容,希望文章能够帮你解决Clojure android无法读取文件所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。