Java – Android and gson throw no args constructor not found exception

There is a gson problem in my android app

JSON input

[
    {"id":"1202","parent_id":"0","agrpcount":"0","disp_order":"1","code":"PROD-NEW","name":"New Products","active":"1"},{"id":"1119","disp_order":"2","code":"PROD-VID","name":"\\\"How To\\\" Videos",{"id":"1685","disp_order":"3","code":"SUPP-RESOUR","name":"Support Resources",{"id":"49","disp_order":"109","code":"EQ","name":"Equipment for Sign Making",{"id":"22","disp_order":"110","code":"application-tape","name":"Application Tapes","active":"1"}
]

Container class for each array item

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

The class to load the category array

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

When I run this code, I get the following in the log

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)

I tried to add a no args constructor to the category class, but it didn't help Because Java creates it automatically, it's not surprising

Who knows how to solve this problem?

thank you.

Solution

Trying to make category class public static

public static class Category {/* fields */}

I bet what's happening is because you didn't make the class static. It first tries to create your parent / external class (COM. Signwarehouse. Catalog. Swservice), which may not have a no Arg constructor

The content of this article comes from the network collection of netizens. It is used as a learning reference. The copyright belongs to the original author.
THE END
分享
二维码
< <上一篇
下一篇>>