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,

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" /> 
  1. Api nivel 18
  2. 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/

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); 
FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.