即時通訊工作的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;}}
感謝您的提示。我只是忘記了我的問題中的大括號並更新了它。 – Hans1357
@ Hans1357你可以添加整個MovieModel.class嗎?看看它如何對應於json結構。 –
我加了班。 – Hans1357