Android 如何从API获取json数据数组
我在安卓工作室工作,使用的是Kotlin。我正在尝试从开放的琐事数据库获取json数据。这是我处理请求和响应的类:Android 如何从API获取json数据数组,android,json,api,kotlin,Android,Json,Api,Kotlin,我在安卓工作室工作,使用的是Kotlin。我正在尝试从开放的琐事数据库获取json数据。这是我处理请求和响应的类: class TriviaRequest ( val results: List<TriviaResult> ) class TriviaResult( val category: String, val type: String, val question: String, val correct_answer: Strin
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>
)
这是我获取数据的代码:
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 incorrectAnswers=结果。回答[0]不正确。toSpanned()
出现以下异常情况:
W/System.err:java.lang.NullPointerException:尝试在空对象引用上调用接口方法“java.lang.Object java.util.List.get(int)”
我做错了什么?
谢谢 将您的TriviaRequest类转换为数据类TriviaRequest,但它会给出相同的错误@USMANOSMAIN在您的数据类中,您有拼写错误错误\u答案结尾包含“s”,它应该是不正确的\u答案是这样的!短一个字母。。。谢谢@USMANosmanbut如果您对变量名称不满意,可以使用searalizedName,它可以帮助您根据需要命名变量,但searalizedName应该与Json数据变量匹配
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)
}
}