【问题标题】:java.lang.IllegalStateException: Expected BEGIN_OBJECT but was BEGIN_ARRAY at line 1 column 2 path $java.lang.IllegalStateException:应为 BEGIN_OBJECT 但在第 1 行第 2 列路径 $ 处为 BEGIN_ARRAY
【发布时间】:2017-08-26 04:44:06
【问题描述】:

我是 Retrofit 的新手。以下是我获取供应商列表的代码

示例 JSON 响应是 json 数组而不是 json 对象

[
{
"Key" : "1",
"Value" : "xyz"
},
{
"Key" : "2",
"Value" : "abc"
}
]

下面是我的代码

private void callToRetrofit() {
    ApiInterface apiInterface = ApiClient.getApiClient()
            .create(ApiInterface.class);
    Call<List<SD_Checklist_Supplier_Model>> call = apiInterface.getVendors();
    call.enqueue(new Callback<List<SD_Checklist_Supplier_Model>>() {
        @Override
        public void onResponse(Call<List<SD_Checklist_Supplier_Model>> call, Response<List<SD_Checklist_Supplier_Model>> response) {
            Log.v("onResponse", " : ok" +  response == null ? " null" : "okkkk" + response.toString());
        }

        @Override
        public void onFailure(Call<List<SD_Checklist_Supplier_Model>> call, Throwable t) {
            Log.v("onFailure", " : " + t.toString());
        }
    });
}

模型类

public class SD_Checklist_Supplier_Model {

    @SerializedName("Key")
    private String supplierID;
    @SerializedName("Value")
    private String supplierName;
    private boolean isSupplierSelected;

    public String getSupplierID() {
        return supplierID;
    }

    public void setSupplierID(String supplierID) {
        this.supplierID = supplierID;
    }

    public String getSupplierName() {
        return supplierName;
    }

    public void setSupplierName(String supplierName) {
        this.supplierName = supplierName;
    }

    public boolean isSupplierSelected() {
        return isSupplierSelected;
    }

    public void setSupplierSelected(boolean supplierSelected) {
        isSupplierSelected = supplierSelected;
    }
}

目前,我得到了

com.google.gson.JsonSyntaxException: java.lang.IllegalStateException: 预期为 BEGIN_OBJECT,但在第 1 行第 2 列路径 $ 处为 BEGIN_ARRAY

请帮帮我。

【问题讨论】:

  • 在 POSTMAN 中检查您的 API。它必须来自一个不在数组中的对象。如错误所述。
  • 正如我已经提到的。它是 json 数组而不是里面的标准 json 对象
  • 你会分享 API url 吗?
  • 由于隐私政策,我不能。

标签: java android json retrofit retrofit2


【解决方案1】:

您对 API 调用的响应是一个列表,您没有分配给一个列表。

修改你的代码

 Call<SD_Checklist_Supplier_Model> call = apiInterface.getVendors();

作为

 Call<List<SD_Checklist_Supplier_Model>> call = apiInterface.getVendors();

【讨论】:

  • 我试过了,但是在做这个 api 调用之后没有执行
  • 你能展示你的“SD_Checklist_Supplier_Model”课程吗
  • 没有错误。我猜它不是在调用 api。因为我设置调试器的时候跳出来
  • 既不调用 onResponse() 也不调用 onFailure()
  • 您是否在 api 调用和响应中将所有“SD_Checklist_Supplier_Model”替换为列表。
猜你喜欢
  • 2021-08-02
  • 2022-11-25
  • 2021-04-28
  • 1970-01-01
  • 2019-11-27
  • 2020-04-10
  • 2021-08-05
  • 1970-01-01
相关资源
最近更新 更多