2012-02-02 98 views
0

我使用傑克遜JSON解析器,因爲我聽說它比默認的Android解析器更有效率。我學會了如何使用它關閉這個教程這裏Android傑克遜JSON解析器空值

http://www.mkyong.com/java/jackson-streaming-api-to-read-and-write-json/

這是偉大的教程,如果有人想學習如何使用JSON傑克遜解析器。

不過,我在這有一個問題,我可以從URL解析Java中的數據正常,但是當我用傑克遜與Android,我得到空值或屏幕上只顯示了黑色的某些原因。

爲了從這裏找回我使用這個代碼從網站上的數據

http://www.javacodegeeks.com/2011/01/android-json-parsing-gson-tutorial.html

private InputStream retrieveStream(String url) { 

    DefaultHttpClient client = new DefaultHttpClient(); 

    HttpGet getRequest = new HttpGet(url); 

    try { 

     HttpResponse getResponse = client.execute(getRequest); 
     final int statusCode = getResponse.getStatusLine().getStatusCode(); 

     if (statusCode != HttpStatus.SC_OK) { 
      Log.w(getClass().getSimpleName(), 
       "Error " + statusCode + " for URL " + url); 
      return null; 
     } 

     HttpEntity getResponseEntity = getResponse.getEntity(); 
     return getResponseEntity.getContent(); 

    } 
    catch (IOException e) { 
     getRequest.abort(); 
     Log.w(getClass().getSimpleName(), "Error for URL " + url, e); 
    } 

    return null; 

} 

然後在我的解析數據的方法

 InputStream source = retrieveStream(url); 

    try { 

     JsonFactory jfactory = new JsonFactory(); 


     JsonParser jParser = jfactory.createJsonParser(source); 

然後我分析數據顯示在教程上面鏈接的

while (jParser.nextToken() != JsonToken.END_OBJECT) { 

      String fieldname = jParser.getCurrentName(); 
      if ("Name".equals(fieldname)) { 
       jParser.nextToken(); 
       this.setName(jParser.getText()); 
      } 
      if ("Number".equals(fieldname)) { 
       jParser.nextToken(); 
       this.setNumber(jParser.getText()); 
      } 
     } 

我使用的URL是一個虛擬站點設置了這只是具有我使用練習傑克遜JSON解析就可以了JSON文件。

現在我知道我的解析數據的代碼是好的,因爲我在正常的Java類,我可以用我創建的代碼解析從網站的數據,並能正常工作。

但是,如果我嘗試在Android中的代碼使用的代碼,我剛剛出,我只是得到了一些奇怪的原因黑屏。我在清單

上網功能權限,是不是有什麼錯誤的HTTP代碼我用?如果有的話,有人能告訴我應該怎麼做?另外爲什麼我會得到一個黑屏,我不明白爲什麼它會顯示。

在此先感謝

+1

您知道android現在在其API中具有官方JSON支持。 。 。 – Mob 2012-02-02 10:31:33

+1

我知道,但傑克遜JSON意味着更快,這就是爲什麼我選擇它 – AdamM 2012-02-02 10:32:12

+0

@AdamM couhld你請具體在錯誤的位置? – JoxTraex 2012-02-02 10:32:38

回答

0

我發現這個問題,鏈接是其不能從仿真器訪問本地主機。設置已更改,現在可以訪問鏈接,現在完美工作:D

0

不知道這是否是問題,但你的循環結構是不安全的:這取決於類型的數據你,這是很可能的,你沒有得到END_OBJECT作爲下一個標記。在內容結束時,nextToken()將返回null以指示輸入結束。那麼也許你會因爲某些輸入而陷入無限循環?