我想在onpostexecute中使用httppost方法的响应?

时间:2013-09-03 12:27:52

标签: android

我在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);
}

3 个答案:

答案 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)总结的响应