2012-09-03 17 views
6

Cuando la prueba en el simulador, funciona, pero cuando prueba con mi dispositivo (galaxy s3), que mantiene a generar errores, cuando durante el siguiente código:androide excepción httpclient.execute

HttpResponse response; 
     response = httpclient.execute(httppost); 

las excepciones:

09-03 08:16:49.018: E/AndroidRuntime(24254): java.lang.RuntimeException: Unable to start activity ComponentInfo{sg.dianping/sg.dianping.activity.ItemListActivity}: android.os.NetworkOnMainThreadException 
09-03 08:16:49.018: E/AndroidRuntime(24254): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1970) 
09-03 08:16:49.018: E/AndroidRuntime(24254): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1995) 
09-03 08:16:49.018: E/AndroidRuntime(24254): at android.app.ActivityThread.access$600(ActivityThread.java:128) 
09-03 08:16:49.018: E/AndroidRuntime(24254): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1161) 
09-03 08:16:49.018: E/AndroidRuntime(24254): at android.os.Handler.dispatchMessage(Handler.java:99) 
09-03 08:16:49.018: E/AndroidRuntime(24254): at android.os.Looper.loop(Looper.java:137) 
09-03 08:16:49.018: E/AndroidRuntime(24254): at android.app.ActivityThread.main(ActivityThread.java:4517) 
09-03 08:16:49.018: E/AndroidRuntime(24254): at java.lang.reflect.Method.invokeNative(Native Method) 
09-03 08:16:49.018: E/AndroidRuntime(24254): at java.lang.reflect.Method.invoke(Method.java:511) 
09-03 08:16:49.018: E/AndroidRuntime(24254): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:993) 
09-03 08:16:49.018: E/AndroidRuntime(24254): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:760) 
09-03 08:16:49.018: E/AndroidRuntime(24254): at dalvik.system.NativeStart.main(Native Method) 
09-03 08:16:49.018: E/AndroidRuntime(24254): Caused by: android.os.NetworkOnMainThreadException 
09-03 08:16:49.018: E/AndroidRuntime(24254): at android.os.StrictMode$AndroidBlockGuardPolicy.onNetwork(StrictMode.java:1099) 
09-03 08:16:49.018: E/AndroidRuntime(24254): at java.net.InetAddress.lookupHostByName(InetAddress.java:391) 

Respuesta

15

Se emite esta excepción NetworkingOnMainThread cuando, bueno, realiza actividad de red en el subproceso de la interfaz de usuario. Tiene el potencial de bloquear el hilo principal, ya que espera hasta que la conexión de red finalice antes de reanudar, bloqueando así el hilo.

Tiene 2 opciones.

1 - Mueva todas sus redes a un hilo diferente. La solución más común y fácil es AsyncTask Pero hay otras opciones, como Handlers. Esta es la opción recomendada.

2- Puede cambiar la política para permitir la conexión en red en el hilo de la interfaz de usuario.

sólo tiene que añadir este código

StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder().permitAll().build(); 
StrictMode.setThreadPolicy(policy); 

Esta opción no es recomendable, ya que simplemente no pasa por la excepción. La excepción se produce por una razón. Elegiría la primera opción. Hay muchos tutoriales sobre cómo implementar AsyncTask.

Buena suerte

+0

Respuesta perfecta. No recomendaría el segundo método. – Infinity

+0

Gracias, también encontré este problema, funciona en simulador porque la versión sdk es android 2.3. – John

+0

Es posible que en Android 2.3 se haya permitido. Además, considere aceptar la respuesta si es la correcta. Ayuda a la comunidad. –