问题描述
我正在尝试从books api加载和显示书籍,但信息未显示。如果我使用调试器并逐步执行,但无法从头开始,则可以显示它。
val client = OkHttpClient()
val request = Request.Builder()
.url(url)
.build()
client.run {
newCall(request).enqueue(object : Callback {
override fun onFailure(call: okhttp3.Call,e: IOException) {
e.printstacktrace()
}
override fun onResponse(call: okhttp3.Call,response: Response) {
if (!response.isSuccessful) {
System.err.println("Response unsuccessful")
return
}
val response = response.body?.string()
val books = response?.let { parse(it) }
if (books != null) {
list.addAll(books.bookItems)
}
}
})
delay(500)
}
return list
}
编辑:只需要增加延迟时间并消除renderBooks()调用
解决方法
您需要在初始化片段视图之前调用presenter.getBooks
。尝试将其放在onViewCreated
内。
这种延迟似乎是非常错误的。 您使所有数据请求花费500毫秒。如果花费的时间更长,您将无法获得数据,花费的时间更少,那么您就不必要等待。
我认为这在使用调试器时有效,因为您使函数在return语句之前等待了更长的时间。
正确的解决方案是使用x
。
suspendCoroutine
您可能需要将对字符串的调用包装在try catch中,以从读取输入字符串中捕获任何IOException。