{ "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();
}
}
最佳答案
您首先必须了解的两件事。
- 您的 JSON 数据格式无效。它包含
\
(斜杠)以转义键值对中的双引号。要确认返回的 JSON 数据是否有效,请将您的 JSON 响应复制并粘贴到 JSON validator and Formatter 中。可能是服务器脚本有问题。 如果您将
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/