piernik
piernik

Reputation: 3657

Why is in main thread?

Hello here is my code:

package pl.polskieszlaki.przewodnikjura;

public class JSONParser extends AsyncTask<String, Void, JSONArray> {
public JSONParser() {

}

@Override
protected JSONArray doInBackground(String... url) {
    return getJSONFromUrl(url[0]);
}

public JSONArray getJSONFromUrl(String inputUrl) {
    JSONArray jObj = null;
    String result = "";
    InputStream is = null;
    // Making HTTP request
    Log.d("ps","url: "+inputUrl);
    try {
        URL url = new URL(inputUrl);
        is=url.openStream();
    } catch (Exception e) {
        Log.e("log_tag", "Error in http connection " + e.toString());
    }

    // convert response to string
    try {
        BufferedReader reader = new BufferedReader(new InputStreamReader(
                is, "utf-8"), 8);
        StringBuilder sb = new StringBuilder();
        String line = null;
        while ((line = reader.readLine()) != null) {
            sb.append(line + "\n");
        }
        is.close();
        result = sb.toString();
        Log.v("RESULT: ", result);
    } catch (Exception e) {
        Log.e("log_tag", "Error converting result " + e.toString());
    }

    try {

        jObj = new JSONArray(result);
    } catch (JSONException e) {
        Log.e("log_tag", "Error parsing data " + e.toString());
    }

    //return jArray;
    return jObj;

}

}

I always get "Error in http connection android.os.NetworkOnMainThreadException" - why? I have AsyncTask.

Here is my code in Activity:

    JSONParser jParser = new JSONParser();
    Log.d("ps","1Pobieram url: "+url); 
    // getting JSON string from URL
    JSONArray json = jParser.getJSONFromUrl(url);

Upvotes: 0

Views: 89

Answers (2)

Blackbelt
Blackbelt

Reputation: 157447

you have to call execute() on the instance of JSONParser, instead of getJSONFromUrl() . The method getJSONFromUrl is synchronous:

Change

JSONArray json = jParser.getJSONFromUrl(url);

with

jParser.execute(url);

to retrieve the result, check my answer to this question

Upvotes: 1

Srikanth
Srikanth

Reputation: 584

JSONParser jParser = new JSONParser();
Log.d("ps","1Pobieram url: "+url); 
// getting JSON string from URL
JSONArray json = jParser.getJSONFromUrl(url);

Replace this code to

JSONParser jParser = new JSONParser().execute(url);

In doInBackground store the result in global variable and use that one to update the UI

Upvotes: 0

Related Questions