[从开放式天气API接收数据时,我收到的是null。我在android中使用retroFit2来获取数据。这是日志中的消息:
onResponse: server response Response{protocol=http/1.1, code=200, message=OK,
onResponse: WeatherResponse{weather=com.weatherapp.models.Weather@197d237}
这里是GSON:
{
"coord": {
"lon": -5.93,
"lat": 54.58
},
"weather": [
{
"id": 804,
"main": "Clouds",
"description": "overcast clouds",
"icon": "04d"
}
],
"base": "stations",
"main": {
"temp": 293.15,
"feels_like": 288.01,
"temp_min": 293.15,
"temp_max": 293.15,
"pressure": 1024,
"humidity": 37
},
"visibility": 10000,
"wind": {
"speed": 5.7,
"deg": 160
},
"clouds": {
"all": 96
},
"dt": 1590770221,
"sys": {
"type": 1,
"id": 1376,
"country": "GB",
"sunrise": 1590724667,
"sunset": 1590785095
},
模型
@SerializedName("coord")
@Expose
private CoOrdinateModel coOrdinateModel;
@SerializedName("weather")
@Expose
private WeatherModel[] weatherModel;
@SerializedName("main")
@Expose
private MainModel main;
@SerializedName("visibility")
@Expose
private String visibility;
@SerializedName("wind")
@Expose
private WindModel wind;
响应
public class WeatherResponse {
@SerializedName("coord")
@Expose()
private Weather weather;
public Weather getWeather() {
return weather;
}
@Override
public String toString() {
return "WeatherResponse{" +
"weather=" + weather +
'}';
}
}
API
@GET("/data/2.5/weather")
Call<WeatherResponse> getWeather(
@Query("id") String ID,
@Query("APPID") String API_KEY
);
理想情况下,我几乎需要GSON的所有数据才能将其解析为android应用程序中的java对象。我之前已经用更简单的GSON做到了这一点,但是这个里面有数组,我不确定我的MODEL类是否正确完成以适应这个问题。
将非常感谢您对确定null根本原因的任何帮助
[从开放式天气API接收数据时,我收到的是null。我在android中使用retroFit2来获取数据。这是来自日志的消息:onResponse:服务器响应Response {...
您的响应模型不正确-
您正在谈论的那些“数组”不是数组,它们是嵌套的对象(嗯,weather
是对象的数组,但是仍然)。为了处理此问题,您需要在模型类上创建嵌套类以处理嵌套的对象类型,如下所示: