2012-08-12 50 views
0

我想知道如何去格式化對象安卓:ArrayList的GSON去格式化

的GSON ArrayList中我有下面的類疾病

public class Disease { 

    private int diseaseID; 
    private String diseaseName; 
    private String diseaseDescription; 
    private String diseaseImageURL; 
} 

與setter和變量的干將。

我在android佈局中有一個微調,我想填寫疾病名稱。

下面

是微調代碼

<Spinner 
     android:id="@+id/consultation_deseases" 
     android:layout_width="@dimen/bigSpinnerWidth" 
     android:layout_height="@dimen/bigSpinnerHeight" 
     android:prompt="@string/disease_prompt" /> 

現在的疾病名稱將會從他們的反應將是GSON格式這樣

[{"diseaseName":"Obesity","diseaseID":0},{"diseaseName":"Influenza","diseaseID":1},{"diseaseName":"Smoking","diseaseID":2},{"diseaseName":"FSD","diseaseID":3},{"diseaseName":"STI/STD","diseaseID":4}] 

Web服務發送我試着用下面的代碼

Disease dis = gson.fromJson(json, Disease.class); 

但我得到以下錯誤

08-12 11:29:18.273: E/AndroidRuntime(7518): FATAL EXCEPTION: main 
08-12 11:29:18.273: E/AndroidRuntime(7518): com.google.gson.JsonSyntaxException: java.lang.IllegalStateException: Expected BEGIN_OBJECT but was BEGIN_ARRAY at line 1 column 2 
08-12 11:29:18.273: E/AndroidRuntime(7518):  at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory$Adapter.read(ReflectiveTypeAdapterFactory.java:180) 
08-12 11:29:18.273: E/AndroidRuntime(7518):  at com.google.gson.Gson.fromJson(Gson.java:755) 
08-12 11:29:18.273: E/AndroidRuntime(7518):  at com.google.gson.Gson.fromJson(Gson.java:721) 
08-12 11:29:18.273: E/AndroidRuntime(7518):  at com.google.gson.Gson.fromJson(Gson.java:670) 
08-12 11:29:18.273: E/AndroidRuntime(7518):  at com.google.gson.Gson.fromJson(Gson.java:642) 
08-12 11:29:18.273: E/AndroidRuntime(7518):  at com.example.onlineconsultation.LoginActivity$3.onClick(LoginActivity.java:117) 
08-12 11:29:18.273: E/AndroidRuntime(7518):  at android.view.View.performClick(View.java:3558) 
08-12 11:29:18.273: E/AndroidRuntime(7518):  at android.view.View$PerformClick.run(View.java:14152) 
08-12 11:29:18.273: E/AndroidRuntime(7518):  at android.os.Handler.handleCallback(Handler.java:605) 
08-12 11:29:18.273: E/AndroidRuntime(7518):  at android.os.Handler.dispatchMessage(Handler.java:92) 
08-12 11:29:18.273: E/AndroidRuntime(7518):  at android.os.Looper.loop(Looper.java:137) 
08-12 11:29:18.273: E/AndroidRuntime(7518):  at android.app.ActivityThread.main(ActivityThread.java:4514) 
08-12 11:29:18.273: E/AndroidRuntime(7518):  at java.lang.reflect.Method.invokeNative(Native Method) 
08-12 11:29:18.273: E/AndroidRuntime(7518):  at java.lang.reflect.Method.invoke(Method.java:511) 
08-12 11:29:18.273: E/AndroidRuntime(7518):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:790) 
08-12 11:29:18.273: E/AndroidRuntime(7518):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:557) 
08-12 11:29:18.273: E/AndroidRuntime(7518):  at dalvik.system.NativeStart.main(Native Method) 
08-12 11:29:18.273: E/AndroidRuntime(7518): Caused by: java.lang.IllegalStateException: Expected BEGIN_OBJECT but was BEGIN_ARRAY at line 1 column 2 
08-12 11:29:18.273: E/AndroidRuntime(7518):  at com.google.gson.stream.JsonReader.expect(JsonReader.java:339) 
08-12 11:29:18.273: E/AndroidRuntime(7518):  at com.google.gson.stream.JsonReader.beginObject(JsonReader.java:322) 
08-12 11:29:18.273: E/AndroidRuntime(7518):  at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory$Adapter.read(ReflectiveTypeAdapterFactory.java:168) 

的錯誤是在這條線

Disease dis = gson.fromJson(json, Disease.class); 

問題迎刃而解:Disease[] dis = gson.fromJson(json, Disease[].class);

我很聰明,認識我應該得到在疾病,而不是疾病對象的陣列的響應=)

回答

0

用途:Disease[] dis = gson.fromJson(json, Disease[].class);

,而不是Disease dis = gson.fromJson(json, Disease.class);

1

試試這個,你需要在你的Json數組列表轉換成Java的ArrayList

Gson gson = new Gson(); 
ArrayList<Disease> disArray = gson.fromJson(json, new TypeToken<List<Disease>>(){}.getType());