|
||
|
![]() |
![]() |
Programación y Desarrollo para Android Subforo exclusivo para temas de programación de software para PDAs y desarrollo de aplicaciones, interfaces, etc bajo Android |
![]() |
|
Herramientas |
#1
|
||||
|
||||
Conectar a URL con JSON
Hola,
Quiero empezar a hacer una aplicación para android, y necesito traerme unos datos de una web que esta montada con PHP y hay un metodo que hace un encode de un listado en JSON. Pongo la dirección URL en el navegador y me devuelve bien los datos. Ahora quiero recoger esos datos desde android y mostrarlo en un listado. He comenzado a hacer al app, pero me da un crash la aplicación. He utilizado este tutorial. http://www.androidhive.info/2012/01/...sing-tutorial pero llamando al metodo getJSONFromUrl me da un crash. Debugando no pasa de la linea HttpResponse httpResponse = httpClient.execute(httpPost); Alguien podria ayudarme dandome otro metodo que recoga los datos de la URL, o viendo cual es el fallo que cometo?? |
|
#2
|
||||
|
||||
Prueba con esto:
Una vez que tienes tu objeto jsonObject ya puedes empezar a recorrerlo. Un saludo JSONObject jsonObject = new JSONObject( readJSON( tu URL ) ); public String readJSON(String url) { StringBuilder builder = new StringBuilder(); try { httpGet.setURI( new URI(url) ); HttpResponse response = client.execute(httpGet); StatusLine statusLine = response.getStatusLine(); int statusCode = statusLine.getStatusCode(); if (statusCode == 200) { HttpEntity entity = response.getEntity(); InputStream content = entity.getContent(); BufferedReader reader = new BufferedReader( new InputStreamReader(content)); String line; while ((line = reader.readLine()) != null) { builder.append(line); } } else { Log.e(ParseJSON.class.toString(), "Failed to download file"); } } catch (ClientProtocolException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } catch ( URISyntaxException e){ e.printStackTrace(); } return builder.toString(); } |
#4
|
||||
|
||||
pero eso desde donde lo llamo??
Tengo que llamarlo con un AsyncTask(ni puta idea lo que es lo he leido en internet) o directamente en el MainActivity ? Yo ahora mismo estoy intentando poner un boton que ponga conectar y en ese boton llamar al readJSON (He puesto mil codigos que he encontrado en internet, y el tuyo tambien), y pongo el debug para ver que cuando llega al final, el String que retorna es correcto, pero en la linea "HttpResponse response = client.execute(httpGet);" se sale. El error es: 09-10 14:58:55.609: E/AndroidRuntime(624): FATAL EXCEPTION: main 09-10 14:58:55.609: E/AndroidRuntime(624): java.lang.IllegalStateException: Could not execute method of the activity 09-10 14:58:55.609: E/AndroidRuntime(624): at android.view.View$1.onClick(View.java:3591) 09-10 14:58:55.609: E/AndroidRuntime(624): at android.view.View.performClick(View.java:4084) 09-10 14:58:55.609: E/AndroidRuntime(624): at android.view.View$PerformClick.run(View.java:16966 ) 09-10 14:58:55.609: E/AndroidRuntime(624): at android.os.Handler.handleCallback(Handler.java:615 ) 09-10 14:58:55.609: E/AndroidRuntime(624): at android.os.Handler.dispatchMessage(Handler.java:92 ) 09-10 14:58:55.609: E/AndroidRuntime(624): at android.os.Looper.loop(Looper.java:137) 09-10 14:58:55.609: E/AndroidRuntime(624): at android.app.ActivityThread.main(ActivityThread.jav a:4745) 09-10 14:58:55.609: E/AndroidRuntime(624): at java.lang.reflect.Method.invokeNative(Native Method) 09-10 14:58:55.609: E/AndroidRuntime(624): at java.lang.reflect.Method.invoke(Method.java:511) 09-10 14:58:55.609: E/AndroidRuntime(624): at com.android.internal.os.ZygoteInit$MethodAndArgsCa ller.run(ZygoteInit.java:786) 09-10 14:58:55.609: E/AndroidRuntime(624): at com.android.internal.os.ZygoteInit.main(ZygoteInit .java:553) 09-10 14:58:55.609: E/AndroidRuntime(624): at dalvik.system.NativeStart.main(Native Method) 09-10 14:58:55.609: E/AndroidRuntime(624): Caused by: java.lang.reflect.InvocationTargetException 09-10 14:58:55.609: E/AndroidRuntime(624): at java.lang.reflect.Method.invokeNative(Native Method) 09-10 14:58:55.609: E/AndroidRuntime(624): at java.lang.reflect.Method.invoke(Method.java:511) 09-10 14:58:55.609: E/AndroidRuntime(624): at android.view.View$1.onClick(View.java:3586) 09-10 14:58:55.609: E/AndroidRuntime(624): ... 11 more 09-10 14:58:55.609: E/AndroidRuntime(624): Caused by: android.os.NetworkOnMainThreadException 09-10 14:58:55.609: E/AndroidRuntime(624): at android.os.StrictMode$AndroidBlockGuardPolicy.onNe twork(StrictMode.java:1117) 09-10 14:58:55.609: E/AndroidRuntime(624): at java.net.InetAddress.lookupHostByName(InetAddress. java:385) 09-10 14:58:55.609: E/AndroidRuntime(624): at java.net.InetAddress.getAllByNameImpl(InetAddress. java:236) 09-10 14:58:55.609: E/AndroidRuntime(624): at java.net.InetAddress.getAllByName(InetAddress.java :214) 09-10 14:58:55.609: E/AndroidRuntime(624): at org.apache.http.impl.conn.DefaultClientConnectionO perator.openConnection(DefaultClientConnectionOper ator.java:137) 09-10 14:58:55.609: E/AndroidRuntime(624): at org.apache.http.impl.conn.AbstractPoolEntry.open(A bstractPoolEntry.java:164) 09-10 14:58:55.609: E/AndroidRuntime(624): at org.apache.http.impl.conn.AbstractPooledConnAdapte r.open(AbstractPooledConnAdapter.java:119) 09-10 14:58:55.609: E/AndroidRuntime(624): at org.apache.http.impl.client.DefaultRequestDirector .execute(DefaultRequestDirector.java:360) 09-10 14:58:55.609: E/AndroidRuntime(624): at org.apache.http.impl.client.AbstractHttpClient.exe cute(AbstractHttpClient.java:555) 09-10 14:58:55.609: E/AndroidRuntime(624): at org.apache.http.impl.client.AbstractHttpClient.exe cute(AbstractHttpClient.java:487) 09-10 14:58:55.609: E/AndroidRuntime(624): at org.apache.http.impl.client.AbstractHttpClient.exe cute(AbstractHttpClient.java:465) 09-10 14:58:55.609: E/AndroidRuntime(624): at com.example.test99.JSONParser.readJSON(JSONParser. java:90) 09-10 14:58:55.609: E/AndroidRuntime(624): at com.example.test99.MainActivity.conectar(MainActiv ity.java:30) Que estoy haciendo mal!!!!!!!!!!!!! Ayuda, estoy atrancadisimo. |
#5
|
||||
|
||||
Te lo está diciendo en la excepción:
Caused by: android.os.NetworkOnMainThreadException Las cosas que requieran conectarse a la red hay que llamarlas desde otro hilo, no desde el hilo principal porque puede bloquearse. Una forma sencilla de ejecutar algo desde otro hilo es la AsyncTask.
__________________
El mejor Cuatro en Raya de Android (Hilo en HTCMania, Play Store) ¡Un millón de descargas!
|
![]() |
![]() |
||||||
|