0

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;
}
}
Community
  • 1
  • 1
Ebad Ahmed
  • 63
  • 1
  • 1
  • 6
  • 1
    You should go through a few tutorials. There is a class named `AsyncTask` that you can use. which has pretty useful overrides. Search for it. – Vishal Sharma Oct 29 '15 at 21:44
  • i have search and i does not help me enough to resolve this problem that's why i have ask this question – Ebad Ahmed Oct 29 '15 at 22:02

1 Answers1

1

@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");
meda
  • 45,103
  • 14
  • 92
  • 122
  • in my main activity i have call the method of makehttprequest when i try to make this method in method of doInBackground method of asynctask it give error when i solve that error a new error comes on mainactivity line 75 i-e JSONObject json = jsonParser.makeHttpRequest(url_insert_new, "GET", params); – Ebad Ahmed Oct 29 '15 at 21:55
  • @EbadAhmed I updated my answer on how to use the task, if you get errors you need to tell me which one specifically as I cannot guesss – meda Oct 29 '15 at 21:57
  • what do you mean by parse the result here ? and should i copy your code and replace mine? – Ebad Ahmed Oct 29 '15 at 21:58
  • yes use my code, parse mean you can read the values in post execute, – meda Oct 29 '15 at 21:58
  • what is mean by usage and that where should i paste that code? and thanks for helping me – Ebad Ahmed Oct 29 '15 at 22:08
  • you call it where you want , for example `onCreate()` and you can log the json in `onPostExecute()` like this `Log.d("mylog", "json =" + result);` – meda Oct 29 '15 at 22:16
  • i m new in app development sir i am bit confused this class is just a part of project i am not able to figure out what you are trying to teach me because i have to wrote that is my main activity sir i would like to show you my activity but then this question will become a duplicate i am giving you the link of my main question i will b thankful to you if you are going to help me http://stackoverflow.com/questions/33328578/jsonparser-give-error-app-does-not-insert-data/33328669?noredirect=1#comment54595346_33328669 – Ebad Ahmed Oct 29 '15 at 22:23
  • I see your code but not where you used `InsertNewIdiom` can you show me where it is – meda Oct 29 '15 at 22:48
  • thank you sir for your help it is in onclick method which is in on create method which is in mainactivity – Ebad Ahmed Oct 29 '15 at 22:54