Android Retrofit-模型是API的GSON数组

问题描述 投票:0回答:2

[从开放式天气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 {...

android gson retrofit2
2个回答
1
投票

您的响应模型不正确-


1
投票

您正在谈论的那些“数组”不是数组,它们是嵌套的对象(嗯,weather是对象的数组,但是仍然)。为了处理此问题,您需要在模型类上创建嵌套类以处理嵌套的对象类型,如下所示:

© www.soinside.com 2019 - 2024. All rights reserved.