我在我的Android應用程序中遇到GSON問題。Android和GSON投擲No-Args構造函數未找到異常
JSON輸入
[
{"id":"1202","parent_id":"0","agrpcount":"0","disp_order":"1","code":"PROD-NEW","name":"New Products","active":"1"},
{"id":"1119","parent_id":"0","agrpcount":"0","disp_order":"2","code":"PROD-VID","name":"\\\"How To\\\" Videos","active":"1"},
{"id":"1685","parent_id":"0","agrpcount":"0","disp_order":"3","code":"SUPP-RESOUR","name":"Support Resources","active":"1"},
{"id":"49","parent_id":"0","agrpcount":"0","disp_order":"109","code":"EQ","name":"Equipment for Sign Making","active":"1"},
{"id":"22","parent_id":"0","agrpcount":"0","disp_order":"110","code":"application-tape","name":"Application Tapes","active":"1"}
]
集裝箱對於每個陣列項
public class Category {
public int id;
public int parent_id;
public int agrpcount;
public int disp_order;
public String code;
public String name;
public int active;
}
Class類加載類別陣列
public static List<Category> getCategories(){
Category[] cats;
Gson gson = new Gson();
cats = gson.fromJson(strJSON, Category[].class);
List<Category> CatsList = Arrays.asList(cats);
return CatsList;
}
當運行此代碼我得到在日誌以下
02-28 15:15:42.471: ERROR/AndroidRuntime(777): Caused by: java.lang.RuntimeException: No-args constructor for class com.signwarehouse.catalog.SWService$Category does not exist. Register an InstanceCreator with Gson for this type to fix this problem.
02-28 15:15:42.471: ERROR/AndroidRuntime(777): at com.google.gson.MappedObjectConstructor.constructWithNoArgConstructor(MappedObjectConstructor.java:64)
02-28 15:15:42.471: ERROR/AndroidRuntime(777): at com.google.gson.MappedObjectConstructor.construct(MappedObjectConstructor.java:53)
02-28 15:15:42.471: ERROR/AndroidRuntime(777): at com.google.gson.JsonObjectDeserializationVisitor.constructTarget(JsonObjectDeserializationVisitor.java:40)
02-28 15:15:42.471: ERROR/AndroidRuntime(777): at com.google.gson.JsonDeserializationVisitor.getTarget(JsonDeserializationVisitor.java:56)
02-28 15:15:42.471: ERROR/AndroidRuntime(777): at com.google.gson.ObjectNavigator.accept(ObjectNavigator.java:109)
02-28 15:15:42.471: ERROR/AndroidRuntime(777): at com.google.gson.JsonDeserializationVisitor.visitChild(JsonDeserializationVisitor.java:107)
02-28 15:15:42.471: ERROR/AndroidRuntime(777): at com.google.gson.JsonDeserializationVisitor.visitChildAsObject(JsonDeserializationVisitor.java:95)
02-28 15:15:42.471: ERROR/AndroidRuntime(777): at com.google.gson.JsonArrayDeserializationVisitor.visitArray(JsonArrayDeserializationVisitor.java:72)
02-28 15:15:42.471: ERROR/AndroidRuntime(777): at com.google.gson.ObjectNavigator.accept(ObjectNavigator.java:117)
02-28 15:15:42.471: ERROR/AndroidRuntime(777): at com.google.gson.JsonDeserializationContextDefault.fromJsonArray(JsonDeserializationContextDefault.java:64)
02-28 15:15:42.471: ERROR/AndroidRuntime(777): at com.google.gson.JsonDeserializationContextDefault.deserialize(JsonDeserializationContextDefault.java:49)
02-28 15:15:42.471: ERROR/AndroidRuntime(777): at com.google.gson.Gson.fromJson(Gson.java:568)
02-28 15:15:42.471: ERROR/AndroidRuntime(777): at com.google.gson.Gson.fromJson(Gson.java:515)
02-28 15:15:42.471: ERROR/AndroidRuntime(777): at com.google.gson.Gson.fromJson(Gson.java:484)
02-28 15:15:42.471: ERROR/AndroidRuntime(777): at com.google.gson.Gson.fromJson(Gson.java:434)
02-28 15:15:42.471: ERROR/AndroidRuntime(777): at com.google.gson.Gson.fromJson(Gson.java:406)
我嘗試在Category類中添加一個無參數構造函數,但這沒有幫助。自從Java自動創建它並不意外。
有沒有人有任何想法如何解決這個問題?
謝謝。
你可以發佈整個SWService.Category類嗎?看起來這是一個內心階層。也許GSON無法訪問它。你有沒有試圖讓它成爲自己的一類? – n3utrino 2011-02-28 21:59:17
@gabe:他確實是一個內部公開課。 – 2011-02-28 22:00:56
看起來正確。你可以嘗試從數組中獲取一個對象(編輯文件以包含一個對象)並使用Category.class? – 2011-02-28 22:02:14