2017-07-26 59 views
1

即時通訊工作的Android應用程序,應解析公共交通的基本時間表。基本部分工作得很好,但我有一個JSON列表的問題。Android應用程序:Gson在閱讀時崩潰列表

的輸入反應JSON像這樣

{"Departures": [{ 
    "Id": "68496628", 
    "LineName": "15", 
    "Direction": "Munic", 
    "Platform": { 
    "Name": "4", 
    "Type": "Platform" 
    }, 
    "Mot": "Tram", 
    "RealTime": "\/Date(1501101000000+0200)\/", 
    "ScheduledTime": "\/Date(1501101000000+0200)\/", 
    "State": "InTime", 
    "RouteChanges": [ 
    "510322", 
    "510447", 
    "510448" 
    ], 
    "Diva": { 
    "Number": "11015", 
    "Network": "ooe" 
    }]} 

我的問題是解析清單當然RouteChanges。有時在響應中列表是空的,有時候是這樣的列表。 我的代碼來獲得在Android的名單看起來是這樣的:

public static class Cast { 

    private String name="0"; 

    public String getName() { 
     Log.d("Model","String from first List-Entry is: "+name); 
     return name; 
    } 


} 

但在任何情況下,當我得到一個RouteChanges列表我的應用程序崩潰與下面的日誌 - 週一消息的行:

07-26 22:09:00.628 9578-17541/com.hisham.jsonparsingdemo E/AndroidRuntime: FATAL EXCEPTION: AsyncTask #2 
                     Process: com.hisham.jsonparsingdemo, PID: 9578 
                     java.lang.RuntimeException: An error occurred while executing doInBackground() 
                      at android.os.AsyncTask$3.done(AsyncTask.java:309) 
                      at java.util.concurrent.FutureTask.finishCompletion(FutureTask.java:354) 
                      at java.util.concurrent.FutureTask.setException(FutureTask.java:223) 
                      at java.util.concurrent.FutureTask.run(FutureTask.java:242) 
                      at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:234) 
                      at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1113) 
                      at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:588) 
                      at java.lang.Thread.run(Thread.java:818) 
                     Caused by: com.google.gson.JsonSyntaxException: java.lang.IllegalStateException: Expected BEGIN_OBJECT but was STRING at line 1 column 237 path $.RouteChanges[0] 
                      at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory$Adapter.read(ReflectiveTypeAdapterFactory.java:200) 
                      at com.google.gson.internal.bind.TypeAdapterRuntimeTypeWrapper.read(TypeAdapterRuntimeTypeWrapper.java:40) 
                      at com.google.gson.internal.bind.CollectionTypeAdapterFactory$Adapter.read(CollectionTypeAdapterFactory.java:81) 
                      at com.google.gson.internal.bind.CollectionTypeAdapterFactory$Adapter.read(CollectionTypeAdapterFactory.java:60) 
                      at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory$1.read(ReflectiveTypeAdapterFactory.java:103) 
                      at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory$Adapter.read(ReflectiveTypeAdapterFactory.java:196) 
                      at com.google.gson.Gson.fromJson(Gson.java:810) 
                      at com.google.gson.Gson.fromJson(Gson.java:775) 
                      at com.google.gson.Gson.fromJson(Gson.java:724) 
                      at com.google.gson.Gson.fromJson(Gson.java:696) 
                      at com.hisham.jsonparsingdemo.MainActivity$JSONTask.doInBackground(MainActivity.java:149) 
                      at com.hisham.jsonparsingdemo.MainActivity$JSONTask.doInBackground(MainActivity.java:85) 
                      at android.os.AsyncTask$2.call(AsyncTask.java:295) 
                      at java.util.concurrent.FutureTask.run(FutureTask.java:237) 
                      at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:234)  
                      at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1113)  
                      at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:588)  
                      at java.lang.Thread.run(Thread.java:818)  
                     Caused by: java.lang.IllegalStateException: Expected BEGIN_OBJECT but was STRING at line 1 column 237 path $.RouteChanges[0] 
                      at com.google.gson.stream.JsonReader.beginObject(JsonReader.java:387) 
                      at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory$Adapter.read(ReflectiveTypeAdapterFactory.java:189) 
                      at com.google.gson.internal.bind.TypeAdapterRuntimeTypeWrapper.read(TypeAdapterRuntimeTypeWrapper.java:40)  
                      at com.google.gson.internal.bind.CollectionTypeAdapterFactory$Adapter.read(CollectionTypeAdapterFactory.java:81)  
                      at com.google.gson.internal.bind.CollectionTypeAdapterFactory$Adapter.read(CollectionTypeAdapterFactory.java:60)  
                      at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory$1.read(ReflectiveTypeAdapterFactory.java:103)  
                      at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory$Adapter.read(ReflectiveTypeAdapterFactory.java:196)  
                      at com.google.gson.Gson.fromJson(Gson.java:810)  
                      at com.google.gson.Gson.fromJson(Gson.java:775)  
                      at com.google.gson.Gson.fromJson(Gson.java:724)  
                      at com.google.gson.Gson.fromJson(Gson.java:696)  
                      at com.hisham.jsonparsingdemo.MainActivity$JSONTask.doInBackground(MainActivity.java:149)  
                      at com.hisham.jsonparsingdemo.MainActivity$JSONTask.doInBackground(MainActivity.java:85)  
                      at android.os.AsyncTask$2.call(AsyncTask.java:295)  
                      at java.util.concurrent.FutureTask.run(FutureTask.java:237)  
                      at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:234)  
                      at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1113)  
                      at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:588)  
                      at java.lang.Thread.run(Thread.java:818)  

線149在我的MainActivity是GSON線:

Model movieModel = gson.fromJson(finalObject.toString(), MovieModel.class); // a single line json parsing using Gson 

finalobject創建槽:

for(int i=0; i<parentArray.length(); i++) { 
       JSONObject finalObject = parentArray.getJSONObject(i); 

}

而且parentArray通過JSON陣列,其將關鍵字「出發」

你能幫助我通過這個列表GSON讀取字符串?

謝謝

編輯:整個MovieModelClass:

public class MovieModel { 

@SerializedName("RouteChanges") 
private String LineName; 
private String Direction; 
private String State; 
private String ScheduledTime; 
private String RealTime; 
private String HstOrt; 
private String HstName; 
private String HstId; 

public static class Cast { 

    private String name="0"; 

    public String getName() { 
     return name; 
    } 


} 

public String getLineName(){return LineName;} 
public String getDirection(){return Direction;} 
public String getState(){return State;} 
public String getScheduledTime(){return ScheduledTime;} 
public String getRealTime(){return RealTime;} 
public String getHstOrt(){return HstOrt;} 
public String getHstName(){return HstName;} 
public String getHstId(){return HstId;}} 

回答

1

你需要把一個大括號 「{」 開頭:

{ 
"Departures": [{ 
     "Id": "68496628", 
     "LineName": "15", 
     "Direction": "Munic", 
     "Platform": { 
     "Name": "4", 
     "Type": "Platform" 
     }, 
     "Mot": "Tram", 
     "RealTime": "\/Date(1501101000000+0200)\/", 
     "ScheduledTime": "\/Date(1501101000000+0200)\/", 
     "State": "InTime", 
     "RouteChanges": [ 
     "510322", 
     "510447", 
     "510448" 
     ], 
     "Diva": { 
     "Number": "11015", 
     "Network": "ooe" 
     }] 
} 

此消息是什麼給了我你的錯誤的想法:

Expected BEGIN_OBJECT but was STRING at line 1

更改此行:

String LineName 

此:

List<String> LineName 
+0

感謝您的提示。我只是忘記了我的問題中的大括號並更新了它。 – Hans1357

+0

@ Hans1357你可以添加整個MovieModel.class嗎?看看它如何對應於json結構。 –

+0

我加了班。 – Hans1357

0
{ 
"Departures":[ 
    { 
    "Id":"68496628", 
    "LineName":"15", 
    "Direction":"Munic", 
    "Platform":{ 
     "Name":"4", 
     "Type":"Platform" 
    }, 
    "Mot":"Tram", 
    "RealTime":"\/Date(1501101000000+0200)\/", 
    "ScheduledTime":"\/Date(1501101000000+0200)\/", 
    "State":"InTime", 
    "RouteChanges":[ 
     "510322", 
     "510447", 
     "510448" 
    ], 
    "Diva":{ 
     "Number":"11015", 
     "Network":"ooe" 
    } 
    } 
]} 

仍然是一個右括號}失蹤。您可以隨時在郵差或在線測試您的JSON JSONformatter