Ebad Ahmed
Ebad Ahmed

Reputation: 63

how to make a method in asynctask

Kindly guide me how to make all this into an asynctask method. I have to make this code in asynctask because it is giving a null value because of calling it in uithread. Kindly show me the correct way how to make this possible. I have seen many, many questions on stackoverflow but I am unable to make this work.

I have seen following questions:

How to fix android.os.NetworkOnMainThreadException?

android.os.NetworkOnMainThreadException with android 4.2

NetworkOnMainThreadException

android.os.NetworkOnMainThreadException

How to fix android.os.NetworkOnMainThreadException?

My class is:

public class JSONParser {
static InputStream is = null;
static JSONObject jObj = null;
static String json = "";
public JSONParser() {
}
public JSONObject makeHttpRequest(String url, String method, List<NameValuePair> params)
{  try
{
if(method == "POST")
{
    DefaultHttpClient httpClient = new DefaultHttpClient();
    HttpPost httpPost = new HttpPost(url);
    httpPost.setEntity(new UrlEncodedFormEntity(params));
    HttpResponse httpResponse = httpClient.execute(httpPost);
    HttpEntity httpEntity = httpResponse.getEntity();
    is = httpEntity.getContent();
}
else if(method == "GET"){
 DefaultHttpClient httpClient = new DefaultHttpClient();
    String paramString = URLEncodedUtils.format(params, "utf-8"); url += "?" + paramString;
    HttpGet httpGet = new HttpGet(url);
    HttpResponse httpResponse = httpClient.execute(httpGet);
    HttpEntity httpEntity = httpResponse.getEntity();
    is = httpEntity.getContent();
}
}
catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
catch (ClientProtocolException e) {
e.printStackTrace();
}
catch (IOException e) {
e.printStackTrace();
}
try { BufferedReader reader = new BufferedReader(new InputStreamReader( is, "iso-8859-1"), 8);
    StringBuilder sb = new StringBuilder();
    String line = null;
    while ((line = reader.readLine()) != null)
    { sb.append(line + "\n");
    }
    is.close(); json = sb.toString();
}
catch (Exception e) {
    Log.e("Buffer Error", "Error converting result " + e.toString()); }
     try {
         jObj = new JSONObject(json);
     }
     catch (JSONException e) {
         Log.e("JSON Parser", "Error parsing data " + e.toString());
     }
return jObj;
}
}

Upvotes: 0

Views: 101

Answers (1)

meda
meda

Reputation: 45500

@Ebad, you have answered your own question use an asynctask like the following:

class GetJsonTask extends AsyncTask<String, String, JSONObject>
{
    List<NameValuePair> params;

    public CreateNewProduct(List<NameValuePair> params){
      this.params = params;
    }

    protected JSONObject doInBackground(String... urls)
    {
        JSONParser jsonParser = new JSONParser();
        JSONObject json = jsonParser.makeHttpRequest(url[0],"POST", this.params);

        return json;
    }

    protected void onPostExecute(JSONObject result)
    {
      //parse the result here  
    }
}

Usage:

GetJsonTask jsonTask = new GetJsonTask(params);
jsonTask.execute("http://example.com");

Upvotes: 1

Related Questions