java.lang.IllegalStateException: Expected BEGIN_ARRAY but was BEGIN_OBJECT in my weather App

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

Answers (1)

Meet Miyani
Meet Miyani

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

Related Questions