2011-02-28 4 views
3

Android 앱에서 GSON에 문제가 있습니다. 각 배열 항목Android 및 GSON 던지지 No-Args 생성자를 찾을 수 없습니다.

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; 
} 

클래스에 대한

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 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) 

no-args 생성자를 Category 클래스에 추가하려고 시도했지만 도움이되지 않았습니다. Java가 자동으로 생성되기 때문에 놀랄 일이 아닙니다.

누구든지 문제를 해결하는 방법을 알고 있습니까?

감사합니다. 카테고리 클래스 공개 정적 클래스 만들기 시도

+0

전체 SWService.Category 클래스를 게시 할 수 있습니까? 그것은 내부 클래스 것 같습니다. 어쩌면 GSON에서 액세스 할 수 없습니다. 당신은 그것을 자신의 클래스로 만들려고 했습니까? – n3utrino

+0

@gabe : 그는했고 내부의 공개 수업입니다. –

+0

올바른 것으로 보입니다. 하나의 객체를 포함하도록 파일을 편집하고 Category.class를 사용하여 배열에서 객체 중 하나만 가져올 수 있습니까? –

답변

12

...

public static class Category {/* fields */} 

내가 무엇 일어나고있는 것은 당신이 (/ 외부 클래스가 부모를 만들려고하는 클래스가 정적을하지 않았기 때문에 내기 com.signwarehouse.catalog.SWService) 먼저 인수가없는 생성자가 없습니다.

+0

완벽합니다. 매력처럼 일했습니다. 감사. –

+2

+1 'Category'가 예외 메시지의 내부 클래스라는 점을 잘 알고 있습니다. –

관련 문제