java - 改造将对象数组转换为 GSON 错误

标签 java android json gson retrofit

我正在使用 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);
        }
    }
}

关于java - 改造将对象数组转换为 GSON 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25817604/

相关文章:

ios - 在 swift 上将 JSON 字符串转换为 JSON 对象

java - 如何将 websocket 与 ReSTLet 框架一起使用?

java - 如何使用 startAt() 和 endAt 方法通过多个搜索键搜索 firestore 集合

java:列表包装器,其中允许 get()/set() 但不允许添加/删除

android - 我们如何在 CTS 运行期间跳过任何测试用例?

jquery - 无法将 json 数组转换为字符串

java - 一个非常简单的 java do...while 循环

android - onRetainCustomNonConfigurationInstance 在 AndroidX 中已弃用

android - ICS 中的 TYPE_SYSTEM_OVERLAY

javascript - 按特定规则用JavaScript重构JSON