标题翻译
Android Retrofit - Unable to add response to a List / recyclerview
问题
当我获取到response.body()
时,它不允许我将其设置为一个列表。
示例的GSON数据:
{
"cod": "200",
"message": 0,
"cnt": 5,
"list": [
{
"dt": 1590861600,
"main": {
"temp": 17.74,
"feels_like": 14.52,
"temp_min": 15.99,
"temp_max": 17.74,
"pressure": 1022,
"sea_level": 1022,
"grnd_level": 1021,
"humidity": 51,
"temp_kf": 1.75
},
"weather": [
{
"id": 803,
"main": "Clouds",
"description": "broken clouds",
"icon": "04d"
}
],
"clouds": {
"all": 82
},
"wind": {
"speed": 3.75,
"deg": 124
},
"sys": {
"pod": "d"
},
"dt_txt": "2020-05-30 18:00:00"
}
]
}
类:
public class WeatherResponse {
@SerializedName("cod")
@Expose
private String cod;
@SerializedName("message")
@Expose
private Long message;
@SerializedName("cnt")
@Expose
private Long cnt;
@SerializedName("list")
@Expose
private List<WeatherList> list;
@SerializedName("city")
@Expose
private City city;
}
代码:
private List<WeatherResponse> mWeatherResponseList;
public void onResponse(Call<WeatherResponse> call, Response<WeatherResponse> response) {
Log.d(TAG, "onResponse: server response " + response.toString());
// response code 200 means a successful request
// if successful store the response body in the log
if (response.code() == 200) {
mWeatherResponseList = response.body(); // 抛出错误
// 错误提示不兼容类型: 需要 Java.util.List - 找到 WeatherResponse
}
}
我做了以下更改:
list = new ArrayList<WeatherResponse>(Collections.singleton(((response.body()))));
这似乎已经起作用了。但现在的问题是响应中有嵌套的 JSON。它是一个对象,其中包含了一个包含5个项目的列表。当我尝试在RecyclerView中显示这5个项目时,它只显示一个对象,而不是我实际想要的5个嵌套项目的列表。
英文翻译
When I get my response.body() it will not allow me to set it to a List.
SAMPLE GSON:
{
"cod": "200",
"message": 0,
"cnt": 5,
"list": [
{
"dt": 1590861600,
"main": {
"temp": 17.74,
"feels_like": 14.52,
"temp_min": 15.99,
"temp_max": 17.74,
"pressure": 1022,
"sea_level": 1022,
"grnd_level": 1021,
"humidity": 51,
"temp_kf": 1.75
},
"weather": [
{
"id": 803,
"main": "Clouds",
"description": "broken clouds",
"icon": "04d"
}
],
"clouds": {
"all": 82
},
"wind": {
"speed": 3.75,
"deg": 124
},
"sys": {
"pod": "d"
},
"dt_txt": "2020-05-30 18:00:00"
},
Class
public class WeatherResponse {
@SerializedName("cod")
@Expose
private String cod;
@SerializedName("message")
@Expose
private Long message;
@SerializedName("cnt")
@Expose
private Long cnt;
@SerializedName("list")
@Expose
private List<WeatherList> results;
@SerializedName("city")
@Expose
private City city;
CODE
private List<WeatherResponse> mWeatherResponseList;
public void onResponse(Call<WeatherResponse> call, Response<WeatherResponse> response) {
Log.d(TAG, "onResponse: server response " + response.toString());
// response code 200 means a successful request
// if successful store the response body in the log
if (response.code() == 200) {
mWeatherResponseList = response.body(); --Throws an error
The error states incompatible types: Required Java.util.list - Found WeatherResponse
I did this:
list = new ArrayList<WeatherResponse>(Collections.singleton(((response.body())))); Which appears to have worked. But the problem now is the response has nested Json. Its one object with a list of 5 items. When I try to display the 5 items in the recyclerview it only displays the one object but not the nested list of 5 items which I actually want
答案1
得分: 0
尝试一下:
像这样声明这个ArrayList
private List<WeatherList> mWeatherResponseList = new ArrayList<>();
现在在onResponse()
中使用这个:
mWeatherResponseList = response.body().getResults();
英文翻译
Try this
declare this arraylist like this
private List<WeatherList> mWeatherResponseList=new ArrayList();
now in onResponse()
use this
mWeatherResponseList = response.body().getResults();
答案2
得分: 0
你正在尝试访问整个 JSON 对象,但你只需要 JSON 对象中结果列表部分。所以在调用中你会得到单个 JSON 对象的响应,通过以下方式你可以获取结果列表。
private List<WeatherList> mWeatherResponseList;
public void onResponse(Call<WeatherResponse> call, Response<WeatherResponse> response) {
Log.d(TAG, "onResponse: 服务器响应 " + response.toString());
if (response.code() == 200) {
mWeatherResponseList = response.body().results;
通过这种方式,你可以获取结果列表。
英文翻译
you are trying to access the entire JSON object but you are required with only the list of results in the JSON object.
so you are getting the single JSON object response in the call, so you could get the list of results this way.
private List<WeatherList> mWeatherResponseList;
public void onResponse(Call<WeatherResponse> call, Response<WeatherResponse> response) {
Log.d(TAG, "onResponse: server response " + response.toString());
if (response.code() == 200) {
mWeatherResponseList = response.body().results;
This way you are getting the list.
专注分享java语言的经验与见解,让所有开发者获益!
评论