Reputation: 35
I am trying to make an API call to open-meteo.com API each time I run my app I get the an error:
java.lang.IllegalStateException: Expected BEGIN_ARRAY but was BEGIN_OBJECT
I have checked several answers but they don't match my code.
data class WeatherDataDto(
@field:SerializedName( "time")
val time: List<String>,
@field:SerializedName("temperature_2m")
val temperatures: List<Double>,
@field:SerializedName("weathercode")
val weatherCodes: List<Int>,
@field:SerializedName("pressure_msl")
val pressures: List<Double>,
@field:SerializedName("relativehumidity_2m")
val humidities: List<Double>,
@field:SerializedName( "windspeed_10m")
val windSpeeds: List<Double>,
)
This is my API class:
interface WeatherApi {
@GET("v1/forecast?latitude=52.52&longitude=13.41&hourly=temperature_2m,weathercode,relativehumidity_2m,windspeed_10m,pressure_msl")
suspend fun getWeatherData(
@Query("latitude") lat:Double,
@Query("longitude") long:Double
):WeatherDto
}
"hourly": {
"time": [
"2023-10-16T00:00",
"2023-10-16T01:00",
"2023-10-16T02:00",
"2023-10-16T03:00",
"2023-10-16T04:00",
"2023-10-16T05:00",
"2023-10-16T06:00",
"2023-10-16T07:00",
"2023-10-16T08:00",
"2023-10-16T09:00",
"2023-10-16T10:00",
"2023-10-16T11:00",
"2023-10-16T12:00",
"2023-10-16T13:00",
"2023-10-16T14:00",
"2023-10-16T15:00",
"2023-10-16T16:00",
"2023-10-16T17:00",
"2023-10-16T18:00",
"2023-10-16T19:00",
"2023-10-16T20:00",
"2023-10-16T21:00",
"2023-10-16T22:00",
"2023-10-16T23:00",
"2023-10-17T00:00",
"2023-10-17T01:00",
"2023-10-17T02:00",
"2023-10-17T03:00",
"2023-10-17T04:00",
"2023-10-17T05:00",
"2023-10-17T06:00",
"2023-10-17T07:00",
"2023-10-17T08:00",
"2023-10-17T09:00",
"2023-10-17T10:00",
"2023-10-17T11:00",
"2023-10-17T12:00",
"2023-10-17T13:00",
"2023-10-17T14:00",
"2023-10-17T15:00",
"2023-10-17T16:00",
"2023-10-17T17:00",
"2023-10-17T18:00",
"2023-10-17T19:00",
"2023-10-17T20:00",
"2023-10-17T21:00",
"2023-10-17T22:00",
"2023-10-17T23:00",
"2023-10-18T00:00",
"2023-10-18T01:00",
"2023-10-18T02:00",
"2023-10-18T03:00",
"2023-10-18T04:00",
"2023-10-18T05:00",
"2023-10-18T06:00",
"2023-10-18T07:00",
"2023-10-18T08:00",
"2023-10-18T09:00",
"2023-10-18T10:00",
"2023-10-18T11:00",
"2023-10-18T12:00",
"2023-10-18T13:00",
"2023-10-18T14:00",
"2023-10-18T15:00",
"2023-10-18T16:00",
"2023-10-18T17:00",
"2023-10-18T18:00",
"2023-10-18T19:00",
"2023-10-18T20:00",
"2023-10-18T21:00",
"2023-10-18T22:00",
"2023-10-18T23:00",
"2023-10-19T00:00",
"2023-10-19T01:00",
"2023-10-19T02:00",
"2023-10-19T03:00",
"2023-10-19T04:00",
"2023-10-19T05:00",
"2023-10-19T06:00",
"2023-10-19T07:00",
"2023-10-19T08:00",
"2023-10-19T09:00",
"2023-10-19T10:00",
"2023-10-19T11:00",
"2023-10-19T12:00",
"2023-10-19T13:00",
"2023-10-19T14:00",
"2023-10-19T15:00",
"2023-10-19T16:00",
"2023-10-19T17:00",
"2023-10-19T18:00",
"2023-10-19T19:00",
"2023-10-19T20:00",
"2023-10-19T21:00",
"2023-10-19T22:00",
"2023-10-19T23:00",
"2023-10-20T00:00",
"2023-10-20T01:00",
"2023-10-20T02:00",
"2023-10-20T03:00",
"2023-10-20T04:00",
"2023-10-20T05:00",
"2023-10-20T06:00",
"2023-10-20T07:00",
"2023-10-20T08:00",
"2023-10-20T09:00",
"2023-10-20T10:00",
"2023-10-20T11:00",
"2023-10-20T12:00",
"2023-10-20T13:00",
"2023-10-20T14:00",
"2023-10-20T15:00",
"2023-10-20T16:00",
"2023-10-20T17:00",
"2023-10-20T18:00",
"2023-10-20T19:00",
"2023-10-20T20:00",
"2023-10-20T21:00",
"2023-10-20T22:00",
"2023-10-20T23:00",
"2023-10-21T00:00",
"2023-10-21T01:00",
"2023-10-21T02:00",
"2023-10-21T03:00",
"2023-10-21T04:00",
"2023-10-21T05:00",
"2023-10-21T06:00",
"2023-10-21T07:00",
"2023-10-21T08:00",
"2023-10-21T09:00",
"2023-10-21T10:00",
"2023-10-21T11:00",
"2023-10-21T12:00",
"2023-10-21T13:00",
"2023-10-21T14:00",
"2023-10-21T15:00",
"2023-10-21T16:00",
"2023-10-21T17:00",
"2023-10-21T18:00",
"2023-10-21T19:00",
"2023-10-21T20:00",
"2023-10-21T21:00",
"2023-10-21T22:00",
"2023-10-21T23:00",
"2023-10-22T00:00",
"2023-10-22T01:00",
"2023-10-22T02:00",
"2023-10-22T03:00",
"2023-10-22T04:00",
"2023-10-22T05:00",
"2023-10-22T06:00",
"2023-10-22T07:00",
"2023-10-22T08:00",
"2023-10-22T09:00",
"2023-10-22T10:00",
"2023-10-22T11:00",
"2023-10-22T12:00",
"2023-10-22T13:00",
"2023-10-22T14:00",
"2023-10-22T15:00",
"2023-10-22T16:00",
"2023-10-22T17:00",
"2023-10-22T18:00",
"2023-10-22T19:00",
"2023-10-22T20:00",
"2023-10-22T21:00",
"2023-10-22T22:00",
"2023-10-22T23:00"
],
"temperature_2m": [
6.0,
5.9,
5.7,
5.2,
4.9,
4.9,
4.8,
5.2,
6.3,
7.9,
9.2,
10.3,
10.7,
10.6,
10.5,
10.3,
9.7,
8.9,
8.5,
7.6,
7.0,
6.8,
6.5,
6.1,
5.8,
5.5,
5.3,
4.9,
4.7,
4.6,
4.2,
4.2,
6.1,
8.1,
9.8,
10.7,
11.1,
11.4,
11.5,
11.2,
10.2,
9.0,
8.0,
7.1,
6.7,
6.4,
6.0,
5.5,
5.2,
5.0,
4.8,
4.5,
4.1,
3.9,
3.7,
4.3,
6.2,
8.1,
10.0,
11.4,
12.2,
12.6,
12.3,
11.8,
10.7,
9.1,
8.0,
7.2,
6.7,
6.2,
5.9,
5.6,
5.4,
5.3,
5.4,
5.4,
5.5,
5.6,
5.7,
5.7,
5.9,
6.3,
6.7,
6.9,
7.2,
7.4,
7.7,
7.8,
7.8,
7.9,
7.8,
7.8,
7.8,
7.7,
7.6,
7.4,
7.1,
6.7,
6.2,
5.6,
5.0,
4.4,
3.9,
3.7,
3.7,
3.9,
4.3,
4.9,
5.4,
5.8,
6.0,
5.9,
5.4,
4.7,
3.9,
3.0,
2.1,
1.4,
1.0,
0.8,
0.6,
0.3,
-0.1,
-0.4,
-0.6,
-0.7,
-0.7,
-0.6,
-0.4,
-0.2,
0.0,
0.3,
0.5,
0.5,
0.6,
0.6,
0.6,
0.7,
0.7,
0.7,
0.8,
0.8,
0.9,
0.9,
1.0,
1.0,
1.0,
1.1,
1.1,
1.1,
1.2,
1.4,
1.8,
2.2,
2.8,
3.5,
3.9,
4.1,
4.0,
3.9,
3.7,
3.4,
3.1,
2.8,
2.5,
2.2,
1.9,
1.8
],
"weathercode": [
3,
2,
2,
1,
2,
2,
3,
2,
2,
2,
3,
2,
2,
3,
3,
3,
2,
3,
3,
3,
3,
3,
2,
2,
2,
2,
2,
3,
45,
45,
45,
45,
1,
0,
1,
2,
3,
2,
2,
2,
2,
1,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
1,
0,
3,
1,
0,
3,
0,
2,
1,
1,
1,
2,
1,
1,
1,
1,
3,
3,
3,
3,
3,
3,
3,
3,
3,
61,
61,
61,
61,
61,
61,
61,
3,
3,
3,
3,
3,
3,
3,
3,
3,
3,
3,
3,
3,
3,
3,
61,
61,
61,
3,
3,
3,
3,
3,
3,
3,
3,
3,
3,
3,
3,
3,
3,
3,
3,
3,
3,
71,
71,
71,
73,
73,
73,
73,
73,
73,
71,
71,
71,
3,
3,
3,
3,
3,
3,
3,
3,
3,
3,
3,
3,
3,
3,
3,
3,
3,
3,
3,
3,
3,
2,
2,
2,
3,
3,
3,
3,
3,
3,
3,
3,
3,
2,
2
],
"relativehumidity_2m": [
83,
83,
85,
88,
90,
89,
89,
88,
83,
78,
70,
65,
63,
64,
65,
65,
70,
77,
80,
86,
88,
88,
91,
93,
94,
94,
94,
95,
97,
98,
99,
100,
92,
83,
74,
65,
60,
58,
57,
58,
69,
76,
81,
85,
85,
84,
87,
90,
91,
92,
92,
93,
94,
94,
94,
93,
86,
77,
71,
64,
58,
52,
56,
60,
64,
70,
76,
80,
80,
81,
82,
84,
83,
83,
82,
81,
80,
79,
79,
81,
82,
81,
81,
82,
81,
80,
79,
78,
79,
80,
80,
81,
82,
83,
83,
82,
81,
80,
80,
79,
78,
77,
75,
70,
63,
57,
54,
53,
52,
50,
49,
48,
48,
49,
51,
56,
61,
66,
68,
68,
69,
72,
77,
81,
85,
88,
91,
92,
92,
91,
90,
88,
87,
88,
88,
88,
89,
90,
91,
92,
92,
92,
92,
92,
92,
92,
92,
92,
92,
93,
92,
90,
88,
85,
81,
77,
74,
74,
77,
79,
81,
84,
87,
90,
93,
95,
96,
96
],
"windspeed_10m": [
13.7,
13.7,
12.6,
11.9,
11.3,
11.2,
11.4,
12.3,
12.2,
11.2,
12.8,
12.5,
11.9,
10.5,
10.8,
9.9,
7.9,
6.5,
5.2,
4.7,
4.0,
4.0,
3.8,
3.3,
2.6,
1.8,
3.1,
2.9,
2.4,
1.8,
2.9,
1.5,
1.1,
2.1,
2.0,
3.6,
4.5,
4.1,
4.3,
3.8,
3.8,
4.0,
3.6,
3.1,
3.3,
3.3,
3.8,
3.5,
3.1,
3.3,
3.7,
3.5,
3.7,
4.0,
4.4,
4.3,
5.8,
6.0,
6.6,
8.4,
10.0,
11.3,
11.0,
9.6,
9.1,
8.8,
8.8,
9.9,
10.3,
11.0,
11.4,
11.0,
12.1,
10.3,
12.6,
10.9,
12.3,
12.6,
13.3,
13.0,
13.0,
11.5,
12.6,
11.9,
11.9,
11.9,
13.1,
13.7,
14.3,
14.0,
14.8,
15.6,
17.1,
17.9,
18.3,
18.8,
18.9,
19.1,
19.1,
19.0,
18.7,
18.1,
18.1,
18.5,
19.5,
20.4,
20.6,
20.6,
20.6,
20.9,
21.3,
21.7,
22.4,
22.9,
23.3,
23.7,
24.0,
24.1,
24.1,
23.7,
23.3,
22.9,
22.2,
21.6,
21.5,
21.9,
22.1,
21.6,
20.6,
19.8,
18.6,
17.1,
16.3,
15.3,
13.5,
12.0,
10.0,
7.7,
6.0,
4.3,
3.0,
1.8,
0.8,
1.3,
2.6,
3.5,
4.5,
5.2,
5.1,
4.8,
4.8,
5.7,
7.2,
8.2,
9.0,
9.5,
9.8,
9.7,
8.9,
8.4,
7.6,
7.0,
6.5,
6.0,
5.9,
5.9,
5.9,
5.5
],
"pressure_msl": [
1019.1,
1019.1,
1019.1,
1019.5,
1019.0,
1019.6,
1019.5,
1019.7,
1020.2,
1020.3,
1020.4,
1020.1,
1020.1,
1020.3,
1019.8,
1020.3,
1020.1,
1020.8,
1021.1,
1021.4,
1021.5,
1021.8,
1022.1,
1022.1,
1022.0,
1021.9,
1021.9,
1022.0,
1022.1,
1022.0,
1022.3,
1022.8,
1023.0,
1023.2,
1023.0,
1022.5,
1021.9,
1021.2,
1020.6,
1020.7,
1020.8,
1020.9,
1020.6,
1020.5,
1020.4,
1020.4,
1020.1,
1019.9,
1019.7,
1019.3,
1018.9,
1018.5,
1018.3,
1018.1,
1018.2,
1018.1,
1017.8,
1017.3,
1016.8,
1016.1,
1015.2,
1014.4,
1013.8,
1013.4,
1012.4,
1012.2,
1011.9,
1011.4,
1011.0,
1010.4,
1009.7,
1009.2,
1008.1,
1007.9,
1006.7,
1006.2,
1005.7,
1005.1,
1004.9,
1004.8,
1004.5,
1004.4,
1004.1,
1003.7,
1003.5,
1003.1,
1002.9,
1002.5,
1002.5,
1002.7,
1002.8,
1003.0,
1003.3,
1003.5,
1003.5,
1003.5,
1003.5,
1003.5,
1003.6,
1003.8,
1004.2,
1004.6,
1005.0,
1005.1,
1005.2,
1005.1,
1004.9,
1004.6,
1004.3,
1004.0,
1003.7,
1003.5,
1003.4,
1003.3,
1003.1,
1002.8,
1002.4,
1001.9,
1001.3,
1000.5,
999.8,
999.0,
998.2,
997.5,
996.9,
996.3,
995.8,
995.4,
995.0,
994.7,
994.4,
994.0,
993.8,
993.8,
993.6,
993.5,
993.6,
993.8,
994.1,
994.4,
994.8,
995.1,
995.4,
995.7,
996.0,
996.4,
996.8,
997.3,
997.9,
998.6,
999.3,
1000.1,
1001.0,
1001.9,
1002.6,
1003.3,
1004.0,
1004.7,
1005.5,
1006.3,
1007.3,
1008.4,
1009.4,
1010.3,
1011.2,
1012.0,
1012.8,
1013.5
]
}
data class WeatherData( val time:LocalDateTime, val temperatureCelsius: Double, val pressure: Double, val windSpeed: Double, val humidity: Double, val weatherType: WeatherType )
@Provides @Singleton fun provideWeatherApi():WeatherApi{
return Retrofit.Builder()
.baseUrl("https://api.open-meteo.com/")
.addConverterFactory(GsonConverterFactory.create())
.build()
.create()
}
Upvotes: 1
Views: 69
Reputation: 119
Make sure you have model class, generated like this.
WeatherDTO.kt
data class WeatherDTO(
@field:SerializedName("elevation")
val elevation: Int? = null,
@field:SerializedName("hourly_units")
val hourlyUnits: HourlyUnits? = null,
@field:SerializedName("generationtime_ms")
val generationtimeMs: Double? = null,
@field:SerializedName("timezone_abbreviation")
val timezoneAbbreviation: String? = null,
@field:SerializedName("timezone")
val timezone: String? = null,
@field:SerializedName("latitude")
val latitude: Double? = null,
@field:SerializedName("utc_offset_seconds")
val utcOffsetSeconds: Int? = null,
@field:SerializedName("hourly")
val hourly: Hourly? = null,
@field:SerializedName("longitude")
val longitude: Double? = null
)
Hourly.kt
data class Hourly(
@field:SerializedName("pressure_msl")
val pressureMsl: List<Double> = emptyList(),
@field:SerializedName("temperature_2m")
val temperature2m: List<Double> = emptyList,
@field:SerializedName("relativehumidity_2m")
val relativehumidity2m: List<Double> = emptyList,
@field:SerializedName("weathercode")
val weathercode: List<Double> = emptyList,
@field:SerializedName("windspeed_10m")
val windspeed10m: List<Double> = emptyList,
@field:SerializedName("time")
val time: List<Double> = emptyList
)
HourlyUnits.kt
data class HourlyUnits(
@field:SerializedName("pressure_msl")
val pressureMsl: String? = null,
@field:SerializedName("temperature_2m")
val temperature2m: String? = null,
@field:SerializedName("relativehumidity_2m")
val relativehumidity2m: String? = null,
@field:SerializedName("weathercode")
val weathercode: String? = null,
@field:SerializedName("windspeed_10m")
val windspeed10m: String? = null,
@field:SerializedName("time")
val time: String? = null
)
As your return type from the api call seems perfect. This should work fine. Or you can try adding a ScalarsConvertor to the retrofit to check the response received in String format to better understand the scenario.
Note: You must add ScalarsConvertor before the GsonConvertor in Retrofit.
Upvotes: 0