2011-02-28 81 views
3

我在我的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自動創建它並不意外。

有沒有人有任何想法如何解決這個問題?

謝謝。

+0

你可以發佈整個SWService.Category類嗎?看起來這是一個內心階層。也許GSON無法訪問它。你有沒有試圖讓它成爲自己的一類? – n3utrino 2011-02-28 21:59:17

+0

@gabe:他確實是一個內部公開課。 – 2011-02-28 22:00:56

+0

看起來正確。你可以嘗試從數組中獲取一個對象(編輯文件以包含一個對象)並使用Category.class? – 2011-02-28 22:02:14

回答

12

試圖使範疇類的公共靜態類...

public static class Category {/* fields */} 

我敢打賭,發生的事情是,因爲你並沒有使類的靜態它試圖創建父/外部類( com.signwarehouse.catalog.SWService)首先可能沒有無參數構造函數。

+0

完美。像魅力一樣工作。謝謝。 – 2011-02-28 22:08:27

+2

+1很好的發現'Category'是異常消息的內部類。 – 2011-03-01 00:32:40