【问题标题】:Json response not being printed未打印 Json 响应
【发布时间】:2014-10-07 17:39:48
【问题描述】:

我是 Android 和 Java 开发的新手。如果有人可以指导我,我将不胜感激:

我的代码:

public class TokenPost extends MainActivity {

public TokenPost(MainActivity mainActivity) {
    // TODO Auto-generated constructor stub
}

public void postData() {

    Thread thread = new Thread(new Runnable(){
        @Override
        public void run() {
            try {

                try{
                    // Create a new HttpClient and Post Header
                    HttpClient httpclient = new DefaultHttpClient();
                    HttpPost httppost = new HttpPost("http://www.traxbuddy.com/confirm.json");

                    Log.i("Inside TokenPost", "Inside TokenPost");
                        List<NameValuePair> nameValuePair = new ArrayList<NameValuePair>(3);
                        //String foo= "id_token="+token+"&lat="+59.8944400+"&lng="+30.2641700;
                        //nameValuePair1.add(new BasicNameValuePair("id_token", token ));
                          Log.i("Mobile Token", "Mobile Token" + mtokenno);
                          nameValuePair.add(new BasicNameValuePair("mobile", "919876543285"));
                          nameValuePair.add(new BasicNameValuePair("imei", "911212345123891"/*imeicontact*/));
                          nameValuePair.add(new BasicNameValuePair("stoken", mtokenno));

                        // Execute HTTP Post Request



                        HttpResponse response = httpclient.execute(httppost);
                        Log.i("Response from Http Post Request", "Response from Http Post Request: "+ response);

                        System.out.println("Response: " +response.toString());

                        Gson gson = new GsonBuilder().setPrettyPrinting().create();
                        JsonParser jp = new JsonParser();
                        JsonElement je = jp.parse(response.toString());
                        String prettyJsonString = gson.toJson(je);
                        System.out.println(je);
                        System.out.println(prettyJsonString);

                        BufferedReader reader = new BufferedReader(new InputStreamReader(response.getEntity().getContent(), "UTF-8"));
                        StringBuilder builder = new StringBuilder();
                       for (line = null; (line = reader.readLine()) != null;) {
                           builder.append(line).append("\n");

                           System.out.println(line); }

                    }
                    catch (ClientProtocolException e) {
                        // TODO Auto-generated catch block
                    } catch (IOException e) {
                        // TODO Auto-generated catch block
                    }

            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    });

    thread.start(); 


}//postData 
}

我在日志中得到的输出是:

10-07 13:28:49.803: I/Inside TokenPost(1312): Inside TokenPost
10-07 13:28:49.803: I/Mobile Token(1312): Mobile Tokennull
10-07 13:29:02.573: I/Response from Http Post Request(1312): Response from Http Post Request:    org.apache.http.message.BasicHttpResponse@b20e3f18
10-07 13:29:02.573: I/System.out(1312): Response:  org.apache.http.message.BasicHttpResponse@b20e3f18
10-07 13:29:02.603: I/System.out(1312): "org.apache.http.message.BasicHttpResponse@b20e3f18"
10-07 13:29:02.603: I/System.out(1312): "org.apache.http.message.BasicHttpResponse@b20e3f18"
10-07 13:29:02.603: W/System.err(1312): java.lang.NullPointerException
10-07 13:29:02.613: W/System.err(1312): at com.traxbuddy.trax.TokenPost$1.run(TokenPost.java:68)
10-07 13:29:02.613: W/System.err(1312): at java.lang.Thread.run(Thread.java:841)

我应该得到的输出(我是通过使用 CURL 得到的):

{"atoken":"11528aa467271341a624f362ee7dd268b0366016","utoken":"c6205d52218f6d466
e2c4bac3ecc585ddab9db96"}

在这方面的任何帮助将不胜感激。

【问题讨论】:

    标签: java android json apache http


    【解决方案1】:

    我的猜测是response.getEntity().getContent() 返回null,触发 NPE。

    您是否尝试过使用以下方法反序列化正文:

    import org.apache.http.util.EntityUtils;
    // ...
    String json = EntityUtils.toString(response.getEntity(), "UTF-8");
    

    【讨论】:

    • 非常感谢您的回复。我尝试了上述更改,但出现以下异常:10-07 15:18:09.183: W/System.err(1558): java.lang.IllegalArgumentException: HTTP entity may not be null 10-07 15:18:09.193 : W/System.err(1558): 在 org.apache.http.util.EntityUtils.toString(EntityUtils.java:110)
    • 在执行后立即添加Log.e("resp.length", ""+response.getEntity().getContentLength()); - 这说明了什么。
    • 它返回:W/System.err(2274): java.lang.NullPointerException
    【解决方案2】:

    您正在尝试将response.toString()(即"org.apache.http.message.BasicHttpResponse@b20e3f18")解析为JsonElement,从而触发异常。

    替换

        JsonElement je = jp.parse(response.toString());
    

        JsonElement je = jp.parse(EntityUtils.toString(response.getEntity()), "UTF-8");
    

    【讨论】:

    • 非常感谢您的回复。我尝试了上述更改,但出现以下异常: 1. java.lang.IllegalArgumentException: HTTP entity may not be null at org.apache.http.util.EntityUtils.toString(EntityUtils.java:110)
    • 你正在做一个HttpPost,它的回复可能是null,可能是GET在帖子之后?
    • 我刚刚尝试使用“POSTMAN - REST Client”发出 POST 请求,并得到了完美的响应:{“atoken”:“e951cc75c1738409f0fa13f0e8e73fc616e5ded2”,“utoken”:“b1f4b870d7723e1d8 144901b989daab033629”。这意味着响应不为空。我的代码中可能有问题。
    猜你喜欢
    • 1970-01-01
    • 2021-09-12
    • 1970-01-01
    • 2017-08-20
    • 1970-01-01
    • 2020-01-20
    • 2014-11-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多