[英]Retrofit convert array of objects to GSON Error
我使用Retrofit发出HTTP请求,返回一个对象数组,我收到以下错误:
com.google.gson.JsonSyntaxException: java.lang.IllegalStateException: Expected BEGIN_OBJECT but was BEGIN_ARRAY
返回的响应预计如下:
[ {key1: "value1", key2: "value2"}, {key1: "value1", key2: "value2"}, ... ]
我有以下类,用于序列化数据:
public class data {
private List<element> dataList;
public List<element> getElements() {
return dataList;
}
public class element {
@SerializedName("key1")
private String key1;
@SerializedName("key2")
private String key2;
// Getters and Setters
}
}
如果您有任何想法,请告诉我。 谢谢
错误实际上是在我的Retrofit Callback实现中。 我的实现期望一个对象,在这种情况下应该期待一个数组。 谢谢大家的帮助。
之前
//*****MyData*****//
public class MyData {
private List<Data> dataList;
public List<Data> getElements() {
return dataList;
}
public class Data {
@SerializedName("key1")
private String key1;
@SerializedName("key2")
private String key2;
// Getters and Setters
}
}
//*****Callback Implementation*****//
public class MyDataCallback extends Callback {
public MyDataCallback(MyDataCallbackListener<MyData> myDataCallbackListener) {
super(myDataCallbackListener);
}
@Override
public void success(MyData data, Response response) {
if (myDataCallbackListener != null) {
myDataCallbackListener.onCallbackComplete(true, response, MyDataCallback.CALLBACK_SUCCESS_MESSAGE, data);
}
}
}
后
//*****Data*****//
public class Data {
@SerializedName("key1")
private String key1;
@SerializedName("key2")
private String key2;
// Getters and Setters
}
//*****Callback Implementation*****//
public class MyDataCallback extends Callback {
public MyDataCallback(MyDataCallbackListener<List<Data>> myDataCallbackListener) {
super(myDataCallbackListener);
}
@Override
public void success(List<Data> data, Response response) {
if (myDataCallbackListener != null) {
myDataCallbackListener.onCallbackComplete(true, response, MyDataCallback.CALLBACK_SUCCESS_MESSAGE, data);
}
}
}
正如Dave在他的评论中提到的那样,你在类中的递归似乎很奇怪,我假设它是你的响应对象。 (您的班级“数据”有一个“数据”对象列表)。
我会建议一些像这样的更紧张的前进:
public class ResponseObject {
private ArrayList<DataObject> mDataObjects;
public ArrayList<DataObject> getDataObjects() {
return mDataObjects;
}
private class DataObject {
private String key1;
private String key2;
public String getKey1() {
return key1;
}
public String getKey2() {
return key2;
}
}
}
或者因为你在当地也许你可以买杰克啤酒:)从他的照片,我会检查Rouge Ales,21修正案或我最喜欢的最后一次在SF - Magnolia
从数组开始,它不是有效的JSON。 你需要返回这样的东西:
{
dataList: [
{
key1: "value1",
key2: "value2"
},
{
key1: "value3",
key2: "value4"
}
]
}
然后,您可以使用GSON将其反序列化到您的data
类中。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.