解析一个只有根目录的 JSON 文件 - Android

Parse a JSON file with only root - Android

我还需要从结构化的电影数据库中解析 JSON:

    [
  {
    "iso_3166_1": "AD",
    "english_name": "Andorra"
  },
  {
    "iso_3166_1": "AE",
    "english_name": "United Arab Emirates"
  }, 

这是我的 API 服务:

@GET("configuration/countries")
Call<LanguageModel> getLanguages(
        @Query("api_key") String apiKey);

我创建了这个模型来检索数据:

import com.google.gson.annotations.SerializedName;

import java.io.Serializable;

public class LanguageModel implements Serializable {
    @SerializedName("iso_3166_1")
    private String id;
    @SerializedName("english_name")
    private String originalLanguage;

    public String getId() {
        return id;
    }

    public void setId(String id) {
        this.id = id;
    }

    public String getOriginalLanguage() {
        return originalLanguage;
    }

    public void setOriginalLanguage(String originalLanguage) {
        this.originalLanguage = originalLanguage;
    }
}

然后,我调用将所有值对放入一个 HashMap 中:

private HashMap<String, String> initializeMapLang() {
    HashMap<String, String> tmp = new HashMap<>();
    ApiService apiService = ApiBuilder.getClient(DetailActivity.this).create(ApiService.class);
    Call<LanguageModel> call = apiService.getLanguages(BuildConfig.API_KEY);
    call.enqueue(new Callback<LanguageModel>() {
        @Override
        public void onResponse(Call<LanguageModel> call, Response<LanguageModel> response) {
            Pair<String, String> resultLang =  new Pair<>(response.body().getId(), response.body().getOriginalLanguage());
            tmp.put(resultLang.first, resultLang.second);
        }

        @Override
        public void onFailure(Call<LanguageModel> call, Throwable t) { }
    });
    return tmp;
}

问题是我没有收到任何回复。我的模型正确吗?

您的 api 服务正在返回 LanguageModel 的简单列表。 Retrofit 可以为您处理这个问题,您需要做的就是将端点定义从

@GET("configuration/countries")
Call<LanguageModel> getLanguages(
        @Query("api_key") String apiKey);

@GET("configuration/countries")
Call<List<LanguageModel>> getLanguages(
        @Query("api_key") String apiKey);