2014-10-07 69 views
1

我是Android和Java开发新手。我会高度赞赏,如果有人可以指导我:Json响应未打印

我的代码:

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.[email protected] 
10-07 13:29:02.573: I/System.out(1312): Response: [email protected] 
10-07 13:29:02.603: I/System.out(1312): "[email protected]" 
10-07 13:29:02.603: I/System.out(1312): "[email protected]" 
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"} 

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

回答

0

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

您是否尝试过反序列化使用这个身体:

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

非常感谢您的回复更换

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

。我尝试了上述更改,但得到以下异常: 10-07 15:18:09.183:W/System.err(1558):java.lang.IllegalArgumentException:HTTP实体可能不为空 10-07 15 :18:09.193:W/System.err(1558):\t at org.apache.http.util.EntityUtils.toString(EntityUtils.java:110) – user1903022 2014-10-07 19:22:01

+0

立即执行后,你可以添加'Log.e(“resp .length“,”“+ response.getEntity()。getContentLength());' - 这显示了什么。 – ashoke 2014-10-07 20:32:11

+0

它返回:W/System.err(2274):java.lang.NullPointerException – user1903022 2014-10-07 20:49:19

0

你正在试图解析response.toString(),这是"[email protected]",作为JsonElement,引发异常。

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

非常感谢您的回复。我尝试了上面的更改,但是,得到以下异常: 1. java.lang.IllegalArgumentException:HTTP实体可能不为null,位于org.apache.http.util.EntityUtils.toString(EntityUtils.java:110) – user1903022 2014-10-07 19:27:04

+0

做一个'HttpPost'它的响应可能是'null',后可能是'GET'? – ashoke 2014-10-07 19:33:57

+0

我只是试图使使用POST请求 “邮差 - REST客户端”,得到了作为完美的回应: { “atoken”: “e951cc75c1738409f0fa13f0e8e73fc616e5ded2”, “utoken”: “b1f4b870d7723e1d8 144901b989daab033629fe8”}。 这意味着响应不为空。在我的代码中可能有些问题。 – user1903022 2014-10-07 19:59:04