2014-10-07 72 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