Вы получаете сообщение об ошибке: Moshi сообщает, что ожидает массив JSON, но у него есть объект. Ваш метод конечной точки Retrofit выглядит так:
@GET("top_selling")
fun getProperties():
Call<List<GroceryProperty>>
Здесь вы сообщаете Retrofit, что ожидаете List
. В JSON это будет массив, ожидаемый Моши. Однако при нажатии на ссылку на предоставленную вами конечную точку JSON, который вы получаете, будет выглядеть так:
{
"status": "1",
"message": "top selling products",
"data": [
...
]
}
Как видите, этот JSON не массив, а объект, который содержит массив, и отсюда и возникает ошибка Моши. Чтобы десериализовать его в List
, он ожидал начало массива ([
), но то, что он обнаружил, было фактически началом объекта ({
)
Подводя итог, вы ожидают не List
, а объект, который, в свою очередь, содержит этот List
(массив data
в JSON).
Вам нужно будет определить другой класс, который инкапсулирует этот список , что-то вроде этого:
data class TopSellingResponse(
val status: String,
val message: String,
val data: List<GroceryProperty>
)
Если вы затем измените подпись вашего метода на
@GET("top_selling")
fun getProperties():
Call<TopSellingResponse>
Moshi должен иметь возможность десериализовать объект JSON в ваш класс и data
массив в List
, как вы изначально ожидали.