如何使用Retrofit 2获得哈希图响应

N.K*_*K.T 6 android hashmap retrofit2

我试图使用改型2来获取json对象响应。我使用了hashmap,因为键是动态的。这是我的回应课:

public class Countries {

    private Map<String, Model> datas;

    public Map<String, Model> getDatas() {
        return datas;
    }
}
Run Code Online (Sandbox Code Playgroud)

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;
    }
}
Run Code Online (Sandbox Code Playgroud)

到目前为止,我已经尝试处理如下响应:

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) {

            }
        });
Run Code Online (Sandbox Code Playgroud)

并发生此错误:

java.lang.NullPointerException:尝试在空对象引用上调用接口方法'java.util.Set java.util.Map.keySet()'

JSON响应如下所示:

{
    "0": {
        "country_name": "Argentina",
        "continent_name": "South America"
    },
    "1": {
        "country_name": "Germany",
        "continent_name": "Europe"
    }
}
Run Code Online (Sandbox Code Playgroud)

那么如何在HashMap中获得响应?

Ben*_* P. 7

问题是您在Call<Countries>应该使用Call<Map<String, Model>>. 您的回复没有名为“datas”的字段;这只是一个简单的映射StringModel对象。

删除Countries该类并将网络代码中对它的所有引用替换为Map<String, Model>.