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

Respuesta
 
Herramientas
  #1  
Viejo 05/09/12, 13:13:01
Array

[xs_avatar]
NaxoForum NaxoForum no está en línea
Usuario muy activo
 
Fecha de registro: may 2009
Mensajes: 1,368
Modelo de smartphone: Redmi Note 4
Tu operador: Vodafone
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??
Responder Con Cita


  #2  
Viejo 06/09/12, 09:31:53
Array

[xs_avatar]
javito19 javito19 no está en línea
Miembro del foro
· Votos compra/venta: (10)
 
Fecha de registro: feb 2009
Mensajes: 364
Tu operador: Movistar

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();
}
Responder Con Cita
  #3  
Viejo 06/09/12, 09:38:07
Array

[xs_avatar]
javito19 javito19 no está en línea
Miembro del foro
· Votos compra/venta: (10)
 
Fecha de registro: feb 2009
Mensajes: 364
Tu operador: Movistar

faltaban estas variables:

HttpGet httpGet = new HttpGet( );
HttpClient client = new DefaultHttpClient();
Responder Con Cita
  #4  
Viejo 10/09/12, 17:02:24
Array

[xs_avatar]
NaxoForum NaxoForum no está en línea
Usuario muy activo
 
Fecha de registro: may 2009
Mensajes: 1,368
Modelo de smartphone: Redmi Note 4
Tu operador: Vodafone
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.
Responder Con Cita
  #5  
Viejo 10/09/12, 17:45:48
Array

[xs_avatar]
mocelet mocelet no está en línea
Desarrollador
 
Fecha de registro: may 2011
Localización: Madrid
Mensajes: 2,203
Tu operador: -

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!
Responder Con Cita
Respuesta

Estás aquí
Regresar   Portal | Indice > Todo sobre Android > Programación y Desarrollo para Android



Hora actual: 06:15:41 (GMT +2)



User Alert System provided by Advanced User Tagging (Lite) - vBulletin Mods & Addons Copyright © 2025 DragonByte Technologies Ltd.

Contactar por correo / Contact by mail / 邮件联系 /