http - 課金 - ファミリー用お支払い方法



AndroidでClojureをリクエストする方法 (1)

私はアンドロイドアプリを開発するためにlein droidプラグインを使用しています。 しかし、私はインターネットからのデータを受け取ることに問題があります。

[編集]これはちょうど開かれたアプリであり、スラップを含むボタンをクリックします。

I/ActivityManager(  352): Displayed bnm.ikinci.app/.MainActivity: +574ms
D/AndroidRuntime( 1134): Shutting down VM
W/dalvikvm( 1134): threadid=1: thread exiting with uncaught exception (group=0xa5ab4ba8)
E/AndroidRuntime( 1134): FATAL EXCEPTION: main
E/AndroidRuntime( 1134): Process: bnm.ikinci.app, PID: 1134
E/AndroidRuntime( 1134): clojure.lang.ArityException: Wrong number of args (1) passed to: main/MainActivity-onCreate/fn--49
E/AndroidRuntime( 1134):    at clojure.lang.AFn.throwArity(AFn.java:429)
E/AndroidRuntime( 1134):    at clojure.lang.AFn.invoke(AFn.java:32)
E/AndroidRuntime( 1134):    at neko.listeners.view$on_click_call$reify__174.onClick(view.clj:26)
E/AndroidRuntime( 1134):    at android.view.View.performClick(View.java:4438)
E/AndroidRuntime( 1134):    at android.view.View$PerformClick.run(View.java:18422)
E/AndroidRuntime( 1134):    at android.os.Handler.handleCallback(Handler.java:733)
E/AndroidRuntime( 1134):    at android.os.Handler.dispatchMessage(Handler.java:95)
E/AndroidRuntime( 1134):    at android.os.Looper.loop(Looper.java:136)
E/AndroidRuntime( 1134):    at android.app.ActivityThread.main(ActivityThread.java:5001)
E/AndroidRuntime( 1134):    at java.lang.reflect.Method.invokeNative(Native Method)
E/AndroidRuntime( 1134):    at java.lang.reflect.Method.invoke(Method.java:515)
E/AndroidRuntime( 1134):    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:785)
E/AndroidRuntime( 1134):    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:601)
E/AndroidRuntime( 1134):    at dalvik.system.NativeStart.main(Native Method)
W/ActivityManager(  352):   Force finishing activity bnm.ikinci.app/.MainActivity
D/dalvikvm(  352): GC_FOR_ALLOC freed 853K, 15% free 6436K/7492K, paused 47ms, total 50ms
W/ActivityManager(  352): Activity pause timeout for ActivityRecord{a614d430 u0 bnm.ikinci.app/.MainActivity t7 f}
W/EGL_emulation(  524): eglSurfaceAttrib not implemented

[/ EDIT]

私はこれらの2行を私のルートディレクトリのAndroidManifest.template.xmlに貼り付けます。[use-sdkタグの下に]本当の場所です。

  <uses-permission android:name="android.permission.INTERNET" /> 
  <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />

このステップの後、私はちょうどインターネット(slurp " https://www.google.com ")からいくつかのデータを取得しようとしますが、私はクリックするとこのステートメントをボタンのクリックイベントにバインドします。 私は、アプリが停止した得る。

別の方法、

(defn maslurp [url]
  (let [a (new java.io.BufferedReader
               (new java.io.InputStreamReader
                    (.getInputStream (doto (.openConnection (new java.net.URL url))
                                       (.setRequestMethod "GET")
                                       (.setDoOutput true)
                                       (.setUseCaches false)))))]
    (loop [r (.readLine a) s ""]
      (if (nil? r)
        s
        (recur (.readLine a) (clojure.string/join [s r]))))))


(maslurp "https://www.google.com") ; doesn't work either.

私は私の電話SM - C101(S4ズーム)と私のエミュレータで同じa​​pkを試してみました。

ちなみに、私はアンドロイドのhttp要求のためのapacheライブラリを知っていますが、私は先取ドローイングプロジェクトでそれを使用できませんでした。

[はい、私は私のデバイス上のインターネットを持っていると確信しています]

私は何を間違えたのですか?

私の悪い英語のために申し訳ありません、あなたの助けをありがとう。


上記(maslurp)はアンドロイドClojure REPLアプリで動作しますが、(.setDoOutput)がfalseに設定されている場合は、 この質問に従ってください:

(defn maslurp [url]
  (let [a (new java.io.BufferedReader
               (new java.io.InputStreamReader
                    (.getInputStream (doto (.openConnection (new java.net.URL url))
                                       (.setRequestMethod "GET")
                                       (.setDoOutput false) ; false for GET
                                       (.setUseCaches false)))))]
    (loop [r (.readLine a) s ""]
      (if (nil? r)
        s
        (recur (.readLine a) (clojure.string/join [s r]))))))


(maslurp "https://www.google.com") ; works in Clojure REPL app




neko