[英]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.