Я работаю в Android studio и использую Kotlin. Я пытаюсь получить json данные из открытой базы данных пустяков . Это мои классы для обработки запроса и ответа:
class TriviaRequest (
val results: List<TriviaResult>
)
class TriviaResult(
val category: String,
val type: String,
val question: String,
val correct_answer: String,
val incorrect_answer: List<String>
)
Вот как выглядят данные json:
{"response_code":0,"results":[{"category":"General
Knowledge","type":"multiple","difficulty":"easy","question":"What is the nickname of the US state of
California?","correct_answer":"Golden State","incorrect_answers":["Sunshine State","Bay
State","Treasure State"]}]}
И вот мой код для извлечения данных:
private fun fetch(){
Log.d("fetch", "fetching")
val url = "https://opentdb.com/api.php?amount=1&type=multiple"
Log.d("url", "url='" + url + "'")
val request = Request.Builder()
.url(url)
.build()
Log.d("request", request.toString())
Log.d("client", client.toString())
client.newCall(request).enqueue(object: Callback {
override fun onResponse(call: Call, response: Response) {
val body = response.body?.string()
Log.d("body", body)
val gson = GsonBuilder().create()
val triviaRequest = gson.fromJson(body, TriviaRequest::class.java)
val result = triviaRequest.results[0]
val question = result.question.toSpanned()
Log.d("question", question.toString())
val questionCategory = result.category.toSpanned()
Log.d("category", questionCategory.toString())
val correctAnswer = result.correct_answer.toSpanned()
Log.d("correct", correctAnswer.toString())
try {
val incorrectAnswers = result.incorrect_answer[0].toSpanned()
Log.d("incorrect", incorrectAnswers.toString())
} catch (e: Exception) {
e.printStackTrace()
}
override fun onFailure(call: Call, e: IOException) {
e.printStackTrace()
}
Это моя функция toSpanned:
fun String.toSpanned() : Spanned {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
return Html.fromHtml(this, Html.FROM_HTML_MODE_LEGACY)
} else {
@Suppress("DEPRECATION")
return Html.fromHtml(this)
}
}
Мой вопрос , категория и правильный ответ работает нормально но когда исполняется этот код:
val неверный ответ W / System.err: java .lang.NullPointerException: попытка вызвать метод интерфейса 'java .lang.Object java .util.List.get (int)' для нулевого объекта ссылка
Что я делаю не так? Спасибо!