Ver la Versión Completa : Conectar a URL con JSON
NaxoForum
05/09/12, 13:13:01
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/android-json-parsing-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??
javito19
06/09/12, 09:31:53
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();
}
javito19
06/09/12, 09:38:07
faltaban estas variables:
HttpGet httpGet = new HttpGet( );
HttpClient client = new DefaultHttpClient();
NaxoForum
10/09/12, 17:02:24
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.
mocelet
10/09/12, 17:45:48
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.
vBulletin® v3.8.1, Copyright ©2000-2026, Jelsoft Enterprises Ltd.