gpt4 book ai didi

android - Clojure android 无法读取文件

转载 作者:太空宇宙 更新时间:2023-11-03 11:05:52 24 4
gpt4 key购买 nike

我正在尝试使用 clojure 创建一个简单的 android 应用程序,该应用程序读取 csv 文件并允许用户执行类似正则表达式的数据搜索。问题是当我尝试读取数据时,出现以下异常。

IllegalArgumentException 没有实现方法:协议(protocol)的阅读器:#'clojure.java.io/IOFactory 找到类: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

有人有什么想法可以解决我的问题吗?


其他项目文件仅供引用:

主要.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 [config]]
[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 (config (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))))))

项目.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 中改变一次。 Check this.

关于android - Clojure android 无法读取文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33815364/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com