我在doinbackground中使用httppost方法,我也得到了响应。现在,当我将数据传递给webservice时,我得到了一个我必须解析的Jsonobject。并且jsonobject存储在下面的responsebody中。我把return语句作为“res”。但在onpost执行中我得到一个nullpointer异常。
我想在onpostexecute方法中使用String responseBody?
class Thread extends AsyncTask<String, Void , String>{
private String responseBody;
private String res;
@Override
protected String doInBackground(String... params) {
HttpClient client = new DefaultHttpClient();
HttpResponse response;
JSONObject json=new JSONObject();
HttpPost post = new HttpPost(url1);
try {
json.put("URL",getqrcode());
json.put("EmailID", getuseremail());
StringEntity stringEntity = new StringEntity(json.toString());
stringEntity.setContentEncoding("UTF-8");
stringEntity.setContentType("application/json");
post.setEntity(stringEntity);
response = client.execute(post);
Log.e("RESPONSE", response.toString());
String responseBody = EntityUtils
.toString(response.getEntity());
String res= responseBody.toString();
Log.e("RESPONSE BODY", responseBody);
} catch (JSONException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (UnsupportedEncodingException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (ParseException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
// TODO Auto-generated method stub
return res;
}
@Override
protected void onPostExecute(String res) {
Log.e("response is", res);
// TODO Auto-generated method stub
super.onPostExecute(res);
}
答案 0 :(得分:0)
制作响应的全局变量
String res;
并在 onpostExecute()方法中使用:
只需替换
String res= responseBody.toString();
与
res= responseBody.toString();
仅
答案 1 :(得分:0)
您的全局res
屏蔽了try块中定义的本地res
。
由于您填充的res
变量是try块范围的本地变量,因此无法在外部看到它,并且您的编译器不会因全局res
而抱怨。
您可以直接影响res
成员而无需重新声明:
res = responseBody;
从技术上讲,全局声明res
变量没有用,你只需在方法中声明它,但在返回的范围内,即在try块之外(在它之前)。
(另外,toString
没用,因为它只会在String
(对于responseBody也一样,本地范围隐藏了全局范围。在这种情况下,全局范围是无用的)
答案 2 :(得分:0)
只需在doInBackground方法的末尾插入此语句:
return res;
这将返回对oString
中onPostExecute(String oString)
总结的响应