从暂停功能更新Recyclerview适配器

问题描述

我正在尝试从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。

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...