Retrofit将对象数组转换为GSON Error

Pan*_*ong 8 java android json gson retrofit

我使用Retrofit发出HTTP请求,返回一个对象数组,我收到以下错误:

com.google.gson.JsonSyntaxException: java.lang.IllegalStateException: Expected BEGIN_OBJECT but was BEGIN_ARRAY
Run Code Online (Sandbox Code Playgroud)

返回的响应预计如下:

[ {key1: "value1", key2: "value2"}, {key1: "value1", key2: "value2"}, ... ]
Run Code Online (Sandbox Code Playgroud)

我有以下类,用于序列化数据:

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
  }
}
Run Code Online (Sandbox Code Playgroud)

如果您有任何想法,请告诉我.谢谢

Pan*_*ong 10

错误实际上是在我的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);
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

//*****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);
        }
    }
}
Run Code Online (Sandbox Code Playgroud)