Android: JSON Parser with asynchronous task (GET and POST methods)

Just want to check if this is JSON Parser right with an asynchronous task? When I put this code in my Eclipse, this (method.equals ("POST") was underlined in red and it says that the "method" cannot be allowed. Any suggestion or help on this? Thanks.

public class JSONParser { static InputStream is = null; static JSONObject jObj = null; static String json = ""; String url=null; List<NameValuePair> nvp=null; // constructor public JSONParser() { } // function get json from url // by making HTTP POST or GET method public JSONObject makeHttpRequest(String url, String method, List<NameValuePair> params) { BackGroundTask Task= new BackGroundTask(url, method, params); try { return Task.execute().get(); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); return null; } catch (ExecutionException e) { // TODO Auto-generated catch block e.printStackTrace(); return null; } } public class BackGroundTask extends AsyncTask<String, String, JSONObject>{ List<NameValuePair> postparams= new ArrayList<NameValuePair>(); String URL=null; public BackGroundTask(String url, String method, List<NameValuePair> params) { URL=url; postparams=params; } @Override protected JSONObject doInBackground(String... params) { // TODO Auto-generated method stub // Making HTTP request try { // Making HTTP request // check for request method if(method.equals("POST")){ // request method is POST // defaultHttpClient DefaultHttpClient httpClient = new DefaultHttpClient(); HttpPost httpPost = new HttpPost(url); httpPost.setEntity(new UrlEncodedFormEntity(postparams)); HttpResponse httpResponse = httpClient.execute(httpPost); HttpEntity httpEntity = httpResponse.getEntity(); is = httpEntity.getContent(); }else if(method == "GET"){ // request method is GET DefaultHttpClient httpClient = new DefaultHttpClient(); String paramString = URLEncodedUtils.format(postparams, "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 parse the string to a JSON object try { jObj = new JSONObject(json); } catch (JSONException e) { Log.e("JSON Parser", "Error parsing data " + e.toString()); } // return JSON String return jObj; } } } 
+4
source share
2 answers

You forgot to declare the method property in your BackGroundTask class.

EDIT .

 public class BackGroundTask extends AsyncTask<String, String, JSONObject>{ List<NameValuePair> postparams= new ArrayList<NameValuePair>(); String URL=null; String method = null; public BackGroundTask(String url, String method, List<NameValuePair> params) { URL=url; postparams=params; this.method = method; } @Override protected JSONObject doInBackground(String... params) { // TODO Auto-generated method stub // Making HTTP request try { // Making HTTP request // check for request method if(method.equals("POST")){ // request method is POST // defaultHttpClient DefaultHttpClient httpClient = new DefaultHttpClient(); HttpPost httpPost = new HttpPost(url); httpPost.setEntity(new UrlEncodedFormEntity(postparams)); HttpResponse httpResponse = httpClient.execute(httpPost); HttpEntity httpEntity = httpResponse.getEntity(); is = httpEntity.getContent(); }else if(method == "GET"){ // request method is GET DefaultHttpClient httpClient = new DefaultHttpClient(); String paramString = URLEncodedUtils.format(postparams, "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 parse the string to a JSON object try { jObj = new JSONObject(json); } catch (JSONException e) { Log.e("JSON Parser", "Error parsing data " + e.toString()); } // return JSON String return jObj; } } } 
+12
source

You need to set the method as a class variable in BackGroundTask. You pass it to the constructor, but you are not going to do anything with it. Install it in the same way as with url and postparams.

+1
source

All Articles