Android: JSON Parser con tareas asíncronas (métodos GET y POST)
Sólo quiero comprobar si este JSON Parser con tarea asíncrona se hace correctamente? Cuando puse este código en mi Eclipse, este (method.equals ("POST") fue subrayado en rojo.E indican que el "método" no puede ser resuelto.Alguna sugerencia o ayuda en esto? Gracias.
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; } } }
- Añadir biblioteca externa en Android studio 0.3.6
- ¿El zócalo del cliente androide, cómo leer datos?
- Android.content.res.Resources $ NotFoundException: Cadena de recursos ID # 0x0
- Android studio: depurar la aplicación en el dispositivo
- Android: R.java: error <identifier> esperado
- Decodificación de caracteres especiales HTML
- Android - OpenGL ES 2.0: Emulador (Works) - Dispositivo (no)
- ¿Cómo instalar SunJCE en Android?
- Error de logcat de Android: ZipFileCache: init falló cuando archivo zip abierto - específico del dispositivo?
- Android Httpclient
- Consiga un comportamiento igual que AppBarLayout para cualquier ViewGroup en CoordinatorLayout
- ClientProtocolException en httpClient.execute (httpget, responseHandler)
- Google App Engine - escala automática con siempre en instancia?
Se ha olvidado de declarar propiedad de method
en su clase BackGroundTask.
EDITAR Como esto:
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; } } }
Es necesario establecer el método como una variable de clase dentro de BackGroundTask. Lo está pasando al constructor pero no va nada con él. Establecer de la misma manera que ha hecho con url y postparams.
- Problemas con relleno en RelativeLayout
- Gestión adecuada de la memoria en OpenGL en dispositivos Android