http clojure request neko

Cómo solicitar Http Request Clojure en Android



neko (1)

Estoy usando el complemento lein droid para desarrollar aplicaciones de Android. pero tengo un problema para recibir datos de internet.

[EDIT] esta es la aplicación que acaba de abrir y haz clic en el botón que contiene slurp.

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

[/EDITAR]

Pego estas dos líneas en mi AndroidManifest.template.xml en mi directorio raíz como verdadero lugar [bajo la etiqueta use-sdk];

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

Después de este paso solo trato de obtener algunos datos de internet ("slurp" https://www.google.com ) pero ato esta declaración al evento de clic de un botón, cuando hago clic; obtengo la aplicación se ha detenido.

De otra manera,

(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.

Probé la misma aplicación en mi teléfono SM-C101 (S4 Zoom) y mi emulador.

por cierto, sé que las bibliotecas apache para http request en Android pero no pude usarlo en mi proyecto de droides lien.

[sí, estoy seguro de que tengo internet en mis dispositivos]

Qué he hecho mal ?

perdón por mi mal inglés, gracias por tu ayuda a partir de ahora.


El anterior (maslurp) funciona en la aplicación Clojure REPL de Android, si (.setDoOutput) se establece en falso en su lugar, según esta pregunta :

(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