Java 无法为Product.class调用无参数构造函数
我在android应用程序中使用GSON和Volley库进行联网,但在使用GSON将Json响应转换为模型类时,我发现以下错误:Java 无法为Product.class调用无参数构造函数,java,android,gson,getjson,Java,Android,Gson,Getjson,我在android应用程序中使用GSON和Volley库进行联网,但在使用GSON将Json响应转换为模型类时,我发现以下错误: 88-2006/ E/Volley﹕ [121] NetworkDispatcher.run: Unhandled exception java.lang.RuntimeException: Unable to invoke no-args constructor for class [Lcom.example.model.Product;. Register an
88-2006/ E/Volley﹕ [121] NetworkDispatcher.run: Unhandled exception java.lang.RuntimeException: Unable to invoke no-args constructor for class [Lcom.example.model.Product;. Register an InstanceCreator with Gson for this type may fix this problem.
java.lang.RuntimeException: Unable to invoke no-args constructor for class [Lcom.example.model.Product;. Register an InstanceCreator with Gson for this type may fix this problem.
以下是我正在使用的POJO类:
Product.java
public class Product {
private String status;
private List<Result> results = new ArrayList<Result>();
private Pagination pagination;
public Product(){}
// getters and setters
}
Result.java
public class Result {
private String id;
private Properties properties;
public Result{}
}
Properties.java
public class Properties {
private String qbcode;
private String name;
private String purchasedate;
private String vendor;
private String thumbnail;
public Properties(){}
}
我已经检查了与此相同的现有问题,根据我发现的答案,我在所有类中添加了no-arg构造函数,但仍然出现错误,请帮助我解决此问题
Json字符串:
{
"status" : "OK",
"results" : [ {
"id" : "IzIzOjE=",
"properties" : {
"qbcode" : "IN-1-1",
"name" : "Test Name",
"purchasedate" : "2015-05-21",
"vendor" : "Test Vendor",
"thumbnail" : "http://en.wikipedia.org/static/images/project-logos/enwiki.png"
}
}, {
"id" : "IzIzOjI=",
"properties" : {
"qbcode" : "IN-1-2",
"name" : "Test Name",
"purchasedate" : "2015-05-21",
"vendor" : "Test Vendor",
"thumbnail" : "http://en.wikipedia.org/static/images/project-logos/enwiki.png"
}
}, {
"id" : "IzIzOjM=",
"properties" : {
"qbcode" : "IN-1-3",
"name" : "Test Name",
"purchasedate" : "2015-05-21",
"vendor" : "Test Vendor",
"thumbnail" : "http://en.wikipedia.org/static/images/project-logos/enwiki.png"
}
},{
"id" : "IzIzOjU=",
"properties" : {
"qbcode" : "IN-1-5",
"name" : "Test Name",
"purchasedate" : "2015-05-21",
"vendor" : "Test Vendor",
"thumbnail" : "http://en.wikipedia.org/static/images/project-logos/enwiki.png"
}
} ],
"pagination" : {
"first" : "/list?size=20",
"previous" : "/list?start=IzIzOjE=&size=20",
"next" : "/list?start=IzIzOjQx&size=20",
"last" : "/list?start=IzIzOjYx&size=20"
}
}
为所有类添加默认构造函数。例如:
public class Product{
public Product(){
}
}
问题解决了,我对Gson做了一个愚蠢的调用,因为我获得了一个包含其他类(Result.class等)列表的Product类,但我正在发送Product[].class转换为Gson,因此引发异常。您的模型具有私有属性,您必须为同一模型创建setter,或使用所有参数创建构造函数,如下所示:
public class Product {
private String status;
private List<Result> results = new ArrayList<Result>();
private Pagination pagination;
public void setStatus(String status) {
this.status = status;
}
public void setResults(List<Result> results) {
this.results = results;
}
public void setPagination(Pagination pagination) {
this.pagination = pagination;
}
}
公共类产品{
私有字符串状态;
私有列表结果=新建ArrayList();
私有分页分页;
公共无效设置状态(字符串状态){
这个状态=状态;
}
公共void setResults(列出结果){
这个结果=结果;
}
公共无效设置分页(分页分页){
this.pagination=分页;
}
}
或
公共类产品{
私有字符串状态;
私有列表结果=新建ArrayList();
私有分页分页;
公共产品(字符串状态、列表结果、分页分页){
这个状态=状态;
这个结果=结果;
this.pagination=分页;
}
}
请同时包含json数据。您是否已在所有类中添加了标准构造函数(无参数构造函数)?您是否已将无参数构造函数公开?@SachinGupta我已编辑我的问题我已添加了默认构造函数,但仍收到相同的错误检查此答案:
public class Product {
private String status;
private List<Result> results = new ArrayList<Result>();
private Pagination pagination;
public void setStatus(String status) {
this.status = status;
}
public void setResults(List<Result> results) {
this.results = results;
}
public void setPagination(Pagination pagination) {
this.pagination = pagination;
}
}
public class Product {
private String status;
private List<Result> results = new ArrayList<Result>();
private Pagination pagination;
public Product(String status, List<Result> results, Pagination pagination) {
this.status = status;
this.results = results;
this.pagination = pagination;
}
}