目标 JSON 响应



我有一个看起来像这样的JSON响应:

{\"场地\":[{\"id\":

1,\"photo\":\"https://s3.us-east-2.amazonaws.com" }, ....

它有一个关键的"场地",然后是一个对象数组。在改造响应中:

        public void onResponse(Call<List<Venue>> call, Response<List<Venue>> response) {
            venues = response.body();
            venueAdapter.notifyDataSetChanged();
        }

它失败并显示:

java.lang.IllegalStateException: Expected BEGIN_ARRAY but was BEGIN_OBJECT at line 1 column 2 path $

问题是我不知道如何告诉 Retrofit 针对"场地"关键指向的集合。我该怎么做?我不想仅仅因为这个 JSON 响应而创建另一个类场所。

在你的代码中尝试这样。

响应场地类

public class ResponseVenue {
private List<VenuesBean> venues;
public List<VenuesBean> getVenues() {
    return venues;
}
public void setVenues(List<VenuesBean> venues) {
    this.venues = venues;
}
public static class VenuesBean {
    /**
     * id : 1
     * photo : https: //s3.us-east-2.amazonaws.com
     */
    private int id;
    private String photo;
    public int getId() {
        return id;
    }
    public void setId(int id) {
        this.id = id;
    }
    public String getPhoto() {
        return photo;
    }
    public void setPhoto(String photo) {
        this.photo = photo;
    }
}
}

然后在您的代码中使用 .

public void onResponse(Call<ResponseVenue> call, Response<ResponseVenue> response) {
    venues = response.body();
    venueAdapter.notifyDataSetChanged();
}

Post Venue pojo class。我认为你的pojo与响应json不匹配。

只需替换

onResponse(Call<List<Venue>> call, Response<List<Venue>> response)

onResponse(Call<Venue> call, Response<Venue> response)

并且还在改造的API界面中删除列表并仅制作场地

您的改造响应已为此 json 输出设置:

[{\"id\"

:1,\"photo\":\"https://s3.us-east-2.amazonaws.com" }, ....]

它直接将对象映射到列表中。如果您只有一个数组,那么您可以像这样更改 json 响应,但如果此 json 响应中有另一个键值对,那么您应该尝试@KeLiuyue答案。创建一个场地响应 pojo 类,它包含一个列表字段来保存您的场地 pojo 类。
在此之后,像这样检索您的场地Pojo:

public void onResponse(Call<ResponseVenue> call, Response<ResponseVenue> response) {
    venues = response.body().getVenues();
    venueAdapter.notifyDataSetChanged();
}

最新更新