2012-02-02 12 views
0

私は、デフォルトのAndroidパーサーよりもはるかに効率的であると聞いて、Jackson JSONパーサーを使用しています。私はここで、このチュートリアルオフ誰がジャクソンのJSONパーサーを使用する方法を学習したい場合は素晴らしいチュートリアルですAndroid Jackson JSON Parser null値

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

をそれを使用する方法を学びました。

しかし、私はURLからJavaでデータを正しく解析できるという問題があります。ただし、AndroidでJacksonを使用すると、null値が返されるか、何らかの理由で画面が黒く表示されます。ここから

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クラスでは、作成したコードを使用してWebサイトからデータを解析でき、正常に動作するため、解析データコードは問題ありません。

私が今見たコードでAndroidでコードを使用しようとすると、ちょっと奇妙な理由で黒い画面が表示されます。マニフェストでインターネットのアクセス許可が有効になっています

私が使ったHTTPコードに問題がありますか?もしそうなら誰かが私にそれをどうやって行うべきかを教えてもらえますかそしてなぜ私は黒い画面を表示しているのですか、なぜそれが表示されるのか分かりません。データの種類に応じて、あなたが得る、あなたが次のトークンとしてEND_OBJECTを取得しないということは非常に可能です:事前

+1

あなたはアンドロイドがAPIで公式のJSONをサポートしていることを知っています。 。 。 – Mob

+1

私はそれを知っていますが、Jackson JSONははるかに高速であることを意図していますので、私はそれを選択しました – AdamM

+0

@AdamM couhldあなたはどこにエラーがあるのか​​特定してください – JoxTraex

答えて

0

問題が見つかりました。リンクはエミュレータからアクセスできないローカルホストでした。設定が変更され、リンクにアクセスできるようになりました。今すぐ完全に動作します:D

0

これは問題ですが、あなたのループ構造が安全であるかどうかわからないで

感謝。また、コンテンツの最後では、nextToken()は入力の終わりを示すためにnullを返します。だから、おそらくあなたは無限ループに入り、ある種のインプットを持っていますか?