Android : Parser JSON avec async task (méthodes GET et POST)
Veux juste vérifier si ce Parser JSON avec async task est-il bien fait? Quand je mets ce code dans mon Eclipse, cette méthode.equals("POST") a été de souligner en rouge. Et-il dire que cette "méthode" ne peut pas être résolu. Toute suggestion ou aide-t-il? Je vous remercie.
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;
}
}
}
OriginalL'auteur Twister | 2012-08-08
Vous devez vous connecter pour publier un commentaire.
Vous avez oublié de déclarer
method
propriété dans votre BackGroundTask classe.MODIFIER Comme ceci:
public BackGroundTask(String url, String method, List<NameValuePair> params) { URL=url; postparams=params; method=method; < like this? }
Yup, et de le déclarer dans votre corps de classe.
Optionnellement, vous pouvez passer ce paramètre à la méthode execute ().
n'est-ce pas ce que j'ai dit?
Oui, il est. Désolé, vous avez eu de réponse quand j'ai écrit le mien.
OriginalL'auteur Patryk Dobrowolski
Vous devez définir la méthode comme une variable de classe dans BackGroundTask. Vous êtes de passage dans le constructeur, mais ne va pas n'importe quoi avec elle. Définir de la même manière que vous avez fait avec l'url et postparams.
oui dans les tâches d'arrière-plan, juste que vous avez fait avec l'url
OriginalL'auteur jiduvah