Thursday, 25 August 2016

java - How to fix NetworkonMainThreadException in Android?





I'm creating an project for assignment, I'm new to Android, and I wanted to access json from very common url http://api.androidhive.info/contacts/,



Problem: I'm trying to read the url and fetch and parse the json returned by this url,



I've already added following line into my AndroidManifest.xml







Preferences: and my android preferences are



        android:minSdkVersion="8"
android:targetSdkVersion="18" />




  1. Api level 18

  2. Android 4.3



and this is how I'm trying to read the 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();


The Error Message



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)


Also I'm following this tutorial for ListView Example
http://www.androidhive.info/2011/11/android-xml-parsing-tutorial/


Answer




Your Exception actually tells you exactly what you are doing wrong. You are not using another thread to perform NetworkOperations. Instead, you perform the network operation on your UI-Thread, which cannot (does not) work on Android.



Your code that connects to the url should be executed for example inside an AsyncTasks doInBackground() method, off the UI-Thread.



Take a look at this question on how to use the AsyncTask: How to use AsyncTask


No comments:

Post a Comment

c++ - Does curly brackets matter for empty constructor?

Those brackets declare an empty, inline constructor. In that case, with them, the constructor does exist, it merely does nothing more than t...