Помогите распарсить массив JSON с помощью Retrofit
Недавно начал изучать Retrofit, вывел в консоль мой JSON через ScalarsConverter как стринг. Сейчас пытаюсь получить обьекты. Вот мой JSON:
[ ["Horoscopes accurately predict...", false], ["The National Weather Service ... ", false] ]
Data классы:
Инициализация Ретрофит: interface QuestApi {
@GET("curiousily/simple-quiz/master/script/statements-data.json")
fun getInfo(): Call<MainList>
companion object {
var BASE_URL = "https://raw.githubusercontent.com/"
fun create(): QuestApi {
val retrofit = Retrofit.Builder()
.baseUrl(BASE_URL)
.addConverterFactory()
.build()
return retrofit.create(QuestApi::class.java)
Получение ответа:
val apiInterface = QuestApi.create().getInfo()
apiInterface.enqueue(object : Callback<MainList> {
override fun onResponse(
call: Call<MainList>,
response: retrofit2.Response<MainList>
) {
Log.d("tag", response.body().toString())
}
override fun onFailure(call: Call<MainList>, t: Throwable) {
Log.d("tag", "failure")
}
})
Получаю "failure" в логах. Буду очень благодарен за помощь и обьяснение!
Ответы (1 шт):
Автор решения: woesss
→ Ссылка
[ ["Horoscopes accurately predict...", false], ["The National Weather Service ... ", false] ]
Здесь нет объектов, от слова совсем. Это двумерный массив и парсить его нужно соответственно в двумерный массив или список:
@GET("curiousily/simple-quiz/master/script/statements-data.json")
fun getInfo(): Call<List<List<Any>>>
val apiInterface = QuestApi.create().getInfo()
apiInterface.enqueue(object : Callback<List<List<Any>>> {
override fun onResponse(
call: Call<List<List<Any>>>,
response: retrofit2.Response<List<List<Any>>>
) {
Log.d("tag", response.body().toString())
}
override fun onFailure(call: Call<List<List<Any>>>, t: Throwable) {
// так вы увидите более информативный лог
Log.e("tag", "failure", t)
}
})
