簡體   English   中英

Retrofit將對象數組轉換為GSON Error

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

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM