Cómo solucionar NetworkonMainThreadException en Android?
Estoy creando un proyecto para la asignación, soy nuevo en Android, y quería acceder a json desde url muy común http://api.androidhive.info/contacts/
,
Problema: Estoy tratando de leer la url y buscar y analizar el json devuelto por esta url,
- Biblioteca de OkHttp - NetworkOnMainThreadException en la publicación simple
- Android HttpClient: NetworkOnMainThreadException
- Android.os.NetworkOnMainThreadException en un servicio en un proceso separado
- Causado por: android.os.NetworkOnMainThreadException
- Android.os.NetworkOnMainThreadException dentro de AsyncTask
Ya he añadido la siguiente línea a mi AndroidManifest.xml
<uses-permission android:name="android.permission.INTERNET"/>
Preferencias: y mis preferencias de Android son
<uses-sdk android:minSdkVersion="8" android:targetSdkVersion="18" />
- Api nivel 18
- Android 4.3
y esta es la forma en que estoy tratando de leer la url
static InputStream is = null; DefaultHttpClient httpClient = new DefaultHttpClient(); HttpPost httpPost = new HttpPost(url); HttpResponse httpResponse = httpClient.execute(httpPost); HttpEntity httpEntity = httpResponse.getEntity(); is = httpEntity.getContent();
Mensaje de error
11-02 05:23:47.843: E/AndroidRuntime(2207): FATAL EXCEPTION: main 11-02 05:23:47.843: E/AndroidRuntime(2207): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.me.countrypedia/com.me.countrypedia.MainActivity}: android.os.NetworkOnMainThreadException 11-02 05:23:47.843: E/AndroidRuntime(2207): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2211) 11-02 05:23:47.843: E/AndroidRuntime(2207): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2261) 11-02 05:23:47.843: E/AndroidRuntime(2207): at android.app.ActivityThread.access$600(ActivityThread.java:141) 11-02 05:23:47.843: E/AndroidRuntime(2207): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1256)
También estoy siguiendo este tutorial para ListView Ejemplo http://www.androidhive.info/2011/11/android-xml-parsing-tutorial/
- NetworkOnMainThreadException en servicio
- Android.os.NetworkOnMainThreadException en el inicio del servicio en android
- Android - android.os.NetworkOnMainThreadException
- ¿Cómo puedo arreglar android.os.NetworkOnMainThreadException?
- NetworkOnMainThreadException
- Solución rápida para NetworkOnMainThreadException
Su Exception
realmente le dice exactamente lo que está haciendo mal. No está utilizando otro subproceso para realizar NetworkOperations . En su lugar, realiza la operación de red en su UI-Thread, que no puede (no) funcionar en Android.
El código que se conecta a la url debe ejecutarse, por ejemplo, dentro de un método doInBackground()
, fuera de la UI-Thread.
Echa un vistazo a esta pregunta sobre cómo utilizar el AsyncTask: Cómo utilizar AsyncTask
Utilice el siguiente código.
private class UpdateTask extends AsyncTask<String, String,String> { protected String doInBackground(String... urls) { DefaultHttpClient httpClient = new DefaultHttpClient(); HttpPost httpPost = new HttpPost(url); HttpResponse httpResponse = httpClient.execute(httpPost); HttpEntity httpEntity = httpResponse.getEntity(); is = httpEntity.getContent(); return null; } }
y en su ManinActivity Utilice el siguiente código.
new UpdateTask().execute();
Añada las siguientes líneas en su actividad Método onCreate
StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder().permitAll().build(); StrictMode.setThreadPolicy(policy);