1

我在 doinbackground 中使用 httppost 方法,我也得到了响应。现在,当我将数据传递给 web 服务时,我得到了一个必须解析的 Jsonobject。并且该 jsonobject 存储在下面的 responsebody 中。我已将返回语句设置为“res”。但在 onpost 执行中我得到一个空指针异常。

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

3 回答 3

0

只需在 doInBackground 方法的末尾插入此语句:

return res;

这将返回对onPostExecute(String oString)oString 中的总结的响应

于 2013-09-03T12:43:51.717 回答
0

您的全局res正在掩盖restry 块中定义的局部。

由于res您填充的变量在 try 块的范围内是本地的,因此在外部看不到它,并且您的编译器不会因为 global 而抱怨res

您可以简单地影响res成员而无需重新声明它:

res = responseBody;

从技术上讲,全局声明变量没有用res,您可以简单地在方法中声明它,但在与返回相同的范围内,即在 try 块之外(在它之前)。

(另外, thetoString没有用,因为它只会在 a 的情况下返回自己String

(responseBody也是一样,局部作用域隐藏了全局作用域,这种情况下全局作用域没用)

于 2013-09-03T12:40:39.197 回答
0

制作一个全局响应变量

String res;

并在onpostExecute( ) 方法中使用:

只需更换

String res= responseBody.toString();

res= responseBody.toString();

只要

于 2013-09-03T12:29:47.817 回答