解析一个只有根目录的 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);
我还需要从结构化的电影数据库中解析 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);