我正在尝试使用改进2来获取json对象响应。我使用了hashmap,因为键是动态的。这是我的回复课:
public class Countries {
private Map<String, Model> datas;
public Map<String, Model> getDatas() {
return datas;
}
}
Model
类是:
public class Model {
@SerializedName("country_name")
private String country_name;
@SerializedName("continent_name")
private String continent_name;
public String getCountry_name() {
return country_name;
}
public String getContinent_name() {
return continent_name;
}
}
到目前为止,我已经尝试过这样的回应:
call.enqueue(new Callback<Countries>() {
@Override
public void onResponse(Call<Countries> call, Response<Countries> response) {
Map<String, Model> map = new HashMap<String, Model>();
map = response.body().getDatas();
for (String keys: map.keySet()) {
// myCode;
}
}
@Override
public void onFailure(Call<Countries> call, Throwable t) {
}
});
发生此错误:
java.lang.NullPointerException:尝试调用接口方法 &#39; java.util.Set java.util.Map.keySet()&#39;在空对象引用上
JSON响应如下所示:
{
"0": {
"country_name": "Argentina",
"continent_name": "South America"
},
"1": {
"country_name": "Germany",
"continent_name": "Europe"
}
}
那么如何才能在HashMap中获得响应?
答案 0 :(得分:3)
问题是,当您使用Call<Countries>
时,您正在使用Call<Map<String, Model>>
。您的回复没有名为“datas”的字段;它只是String
到Model
个对象的简单地图。
删除Countries
类,并使用Map<String, Model>
替换网络代码中对它的所有引用。
答案 1 :(得分:2)
您的方法getDatas()
重新设置null
,因为您没有将数据分配给它。
你应该这样做以获取数据:
map = response.body().datas;
而不是:
map = response.body().getDatas();
您还应该替换此
private Map<String, Model> datas;
与
public Map<String, Model> datas;
您的代码应如下所示。
call.enqueue(new Callback<Countries>() {
@Override
public void onResponse(Call<Countries> call, Response<Countries> response) {
Map<String, Model> map = new HashMap<String, Model>();
map = response.body().datas;
for (String keys: map.keySet()) {
// myCode;
}
}
@Override
public void onFailure(Call<Countries> call, Throwable t) {
}
});