当前位置: 首页 > 知识库问答 >
问题:

应为BEGIN_ARRAY,但已改版为BEGIN_OBJECT

徐翔
2023-03-14

这是我的界面:

public interface RKIApi {

String BASE_URL = "https://services7.arcgis.com/mOBPykOjAyBO2ZKk/arcgis/rest/services/RKI_Landkreisdaten/FeatureServer/0/";

@Headers("Content-Type: application/json")
@GET("query?where=1%3D1&outFields=cases,deaths,cases_per_population,county,death_rate&returnGeometry=false&outSR=4326&f=json")
Call<List<County>> getCounties();
}

这是我希望将收到的数据转换到的县数据类:

public class County {

@SerializedName("county")
@Expose
private String county;

@SerializedName("cases")
@Expose
private int cases;

@SerializedName("deaths")
@Expose
private int deaths;

@SerializedName("cases_per_population")
@Expose
private float casesPerPopulation;

@SerializedName("death_rate")
@Expose
private float deathRate;

public County(String county, int cases, int deaths, float casesPerPopulation, float deathRate) {
    this.county = county;
    this.cases = cases;
    this.deaths = deaths;
    this.casesPerPopulation = casesPerPopulation;
    this.deathRate = deathRate;
}

...Getters和setters...

Retrofit retrofit = new Retrofit.Builder().baseUrl(RKIApi.BASE_URL)
            .addConverterFactory(GsonConverterFactory.create(gson))
            .build();

    RKIApi apiService = retrofit.create(RKIApi.class);

    Call<List<County>> call = apiService.getCounties();

    call.enqueue(new Callback<List<County>>() {
        @Override
        public void onResponse(@NonNull Call<List<County>> call,@NonNull Response<List<County>> response) {
            ... Do something ...
        }

        @Override
        public void onFailure(@NonNull Call<List<County>> call,@NonNull Throwable t) {
            System.out.println("========== ERROR ==========");
            System.out.println(t.getMessage());
        }
    });

共有1个答案

卢作人
2023-03-14

错误的问题和原因不是在一个设计糟糕的API中,就是在一个错误解释的API中。您的api没有发送对象列表。API很可能会生成如下所示的JSON:

 { ...content }

它不是对象列表而是单个对象。改装正在期待这样的事情:

 [ { ....County } { ..County  }? ]

因为您告诉要修改以返回LIST 的列表。

其中[表示对象数组。因此,为了解决此问题,您有两个选择。或者更改api,使其返回的总是方括号,即使是空列表,如此[]或此[{one object}]为单个结果。

或者手动解析结果。请检查StackOverflow上的以下问题:

使用reverfit时手动解析响应的一部分

 类似资料: