2014-12-22 10 views
-1

我用我的圖書館項目enter link description here這是不可能的解析JSON(離子)

筆者舉了一個例子:

public static class Tweet { 
    public String id; 
    public String text; 
    public String photo; 
} 

public void getTweets() throws Exception { 
    Ion.with(context) 
    .load("http://example.com/api/tweets") 
    .as(new TypeToken<List<Tweet>>(){}) 
    .setCallback(new FutureCallback<List<Tweet>>() { 
     @Override 
     public void onCompleted(Exception e, List<Tweet> tweets) { 
      // chirp chirp 
     } 
    }); 
} 

我以他爲榜樣。但不清楚數據以什麼格式進入例子。 我做例子:

public static class Test { 
     public String name; 
     public String soname; 
     public String age; 
     public String country; 
    } 
    private void setData(){ 
     Ion.with(getActivity()) 
       .load("http://........") 
       .as(new TypeToken<List<Test>>(){}) 
       .setCallback(new FutureCallback<List<Test>>() { 
        @Override 
        public void onCompleted(Exception e, List<Test> result) { 
         // do stuff with the result or error 
         Toast.makeText(getActivity(), result.get(0).name, Toast.LENGTH_LONG).show(); 
        } 
       }); 
    } 

卻得到一個錯誤:

12-22 05:46:59.609  414-414/com.testlist.pavel.transportercity E/AndroidRuntime﹕ FATAL EXCEPTION: main 
    java.lang.NullPointerException 
      at com.testlist.pavel.transportercity.Fragments.Kitchen_list_of_orders$1.onCompleted(Kitchen_list_of_orders.java:49) 
      at com.testlist.pavel.transportercity.Fragments.Kitchen_list_of_orders$1.onCompleted(Kitchen_list_of_orders.java:45) 
      at com.koushikdutta.async.future.SimpleFuture.handleCallbackUnlocked(SimpleFuture.java:79) 
      at com.koushikdutta.async.future.SimpleFuture.setComplete(SimpleFuture.java:105) 
      at com.koushikdutta.ion.IonRequestBuilder$1.run(IonRequestBuilder.java:215) 
      at com.koushikdutta.async.AsyncServer$RunnableWrapper.run(AsyncServer.java:171) 
      at android.os.Handler.handleCallback(Handler.java:587) 
      at android.os.Handler.dispatchMessage(Handler.java:92) 
      at android.os.Looper.loop(Looper.java:130) 
      at android.app.ActivityThread.main(ActivityThread.java:3683) 
      at java.lang.reflect.Method.invokeNative(Native Method) 
      at java.lang.reflect.Method.invoke(Method.java:507) 
      at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:839) 
      at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:597) 
      at dalvik.system.NativeStart.main(Native Method) 

有助於瞭解這是什麼問題?我的回答來自服務器:

{"name":"Vasya","soname":"Pupkin","age":"25","country":"Russian Federation"}{"name":"Iliya","soname":"Strelnikov","age":"43","country":"Kazahstan"} 

也許不正確的數據格式和庫他們不明白?

+0

是你的反應完全,因爲在 jsonLint –

+0

的事實,例如沒有指定哪一行得到作者的表現JSON格式錯誤。所以我不明白。 –

回答

0

Ion庫預計會從url中收到JsonArray。確保你得到JsonArray。其次result.get(0).name有時會返回null pointer,原因是應該先檢查請求期間是否發生錯誤。這可以通過onCompleted方法中的參數e找到。然後,您需要檢查List是否在將元素髮送到烤麪包之前有元素,如果0th elementnot found那麼您將得到空指針錯誤。

onCompleted方法中做類似於下面的操作。

@Override 
public void onCompleted(Exception e, List<Test> result) { 

    //do stuff with the result or error 
    String msg; 
    if(e != null) { 
     msg = "Error occured"; 
    }else if(result.size()>0){ 
     msg = "Received 0 elements"; 
    }else{ 
     msg = result.get(0).name; 
    } 

    Toast.makeText(getActivity(), msg, Toast.LENGTH_LONG).show(); 
} 
+0

12-22 06:08:41.218 577-577/com.testlist.pavel.transportercity D/ionmy:發生錯誤 事實上該示例沒有指定哪一行獲得作者。所以我不明白。 –

+0

我無法理解你的評論: -/ – Panther

+0

java.lang.IllegalStateException:期望的BEGIN_ARRAY,但是BEGIN_OBJECT –