java - Retrofit 的响应无法获取对象值

标签 java android retrofit2

{ "StatusCode": 200, "StatusDescription": "OK", "ErrorMessage": "", "ErrorDetail": "", "Results": [ { "Key": "AccessTokens", "Value": "[{\"Key\":\"XXXXX", \"Value\":\"BABABA\"},{\"Key\":\"DIDADIDA\",\"Value\":\"YYYYY" } ]"}]}

这是我成功调用 API 时得到的响应。 “Results”的数据类型是List。谁能帮我解释一下如何获取“Key”和“Value”。

我的对象类

public class KeyValueItem {

    private String Key;
    private String Value;

    public String getKey() {
        return Key;
    }

    public void setKey(String key) {
        Key = key;
    }

    public String getValue() {
        return Value;
    }

    public void setValue(String value) {
        Value = value;
    }
}

响应类

public class RestServiceResponse {

    @SerializedName("StatusCode")
    @Expose
    public int StatusCode;
    public int getStatusCode() {
        return StatusCode;
    }


    @SerializedName("StatusDescription")
    @Expose
    public String StatusDescription;
    public String getStatusDescription() {
        return StatusDescription;
    }


    @SerializedName("ErrorMessage")
    @Expose
    public String ErrorMessage;
    public String getErrorMessage() {
        return ErrorMessage;
    }


    @SerializedName("ErrorDetail")
    @Expose
    public String ErrorDetail;
    public String getErrorDetail() {
        return ErrorDetail;
    }


    @SerializedName("Results")
    @Expose
    public List<KeyValueItem> Results;
    public List<KeyValueItem> getResults() {
        return Results;
    }

}

请大家帮忙=(

我的一些代码:

public void onResponse(Call<RestServiceResponse> call, Response<RestServiceResponse> response) {

                    Log.i("ddsddsadsa", String.valueOf(response.code()));
                    RestServiceResponse restServiceResponse = response.body();
                    if(restServiceResponse.getStatusCode() == 200){
                        List<KeyValueItem> list = response.body().getResults();
                        JSONArray jsonArray = new JSONArray(list);
                        try {
                            JSONObject job = jsonArray.getJSONObject(1);
                            String testttt = job.getString("Key");
                            Log.i("dsadsadsadas", testttt);
                        } catch (JSONException e) {
                            e.printStackTrace();
                        }

                    }

最佳答案

您首先必须了解的两件事。

  1. 您的 JSON 数据格式无效。它包含 \ (斜杠)以转义键值对中的双引号。要确认返回的 JSON 数据是否有效,请将您的 JSON 响应复制并粘贴到 JSON validator and Formatter 中。可能是服务器脚本有问题。
  2. 如果您将 GsonConvertorFactory 与 Retrofit 结合使用,Retrofit 会在内部自动将 JSON 响应数据转换为 POJO。因此,您不需要在 onResponse() 方法中再次解析它。如果您从服务器端获得正确的 JSON 响应,请按如下方式使用它。

    public void onResponse(Call<RestServiceResponse> call, Response<RestServiceResponse> response) {
    
                // code....
                RestServiceResponse restServiceResponse = response.body();
    
                if (restServiceResponse.getStatusCode() == 200) {
    
                    List<KeyValueItem> list = response.body().getResults();
    
                    for(int i = 0; i < list.size(); i++) {
                         KeyValueItem kvi = list.get(i);
                         // do whatever you want with kvi object
                    }
                }
    }
    

关于java - Retrofit 的响应无法获取对象值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51300606/

相关文章:

Android card.io sdk 显示此设备无法使用相机读取卡号

java.lang.NumberFormatException : Expected an int but was 0. 6 在第 1 行第 8454 列

java - 改造 2 @path 与 @query

java - Retrofit2 POST 请求响应返回null

java - Linux 上的 shell 脚本无法识别新行

java - 从android中的另一个类加载纹理

java - 连接池 C3P0 日志记录

android - New Nexus 7 的布局文件夹

java - 合并sql表中的2列来搜索全名JPA

java - Android手机root状态