【问题标题】:converting to coroutines for geting data for a RecyclerView转换为协程以获取 RecyclerView 的数据
【发布时间】:2022-10-18 22:41:44
【问题描述】:

我的代码是

val cursor = getApplication<Application>().contentResolver.query(
    asksContract.CONTENT_URI, projection, null, null, sortOrder
)
dbCursor.setValue(cursor!!) // Update on different thread

我把它改成了

viewModelScope.launch(Dispatchers.IO) {
    val cursor = getApplication<Application>().contentResolver.query(
        TasksContract.CONTENT_URI, projection, null, null, sortOrder
    )
    dbCursor.setValue(cursor!!) 
    }

我认为这是正确的,不再需要在主线程中发布值。这个对吗?

另外我仍然收到警告

This `Cursor` should be freed up after use with `#close()`

这是有道理的,我也应该

dbCursor.close()

在我设置值之后?还是我只是忽略错误?代码在 viewModel 中加载数据,光标是 LiveData 并且有一个观察者。我认为可能不是因为 Recyclerview 仍在使用光标。

PS我 setValues 原因

java.lang.IllegalStateException: Cannot invoke setValue on a background thread

但是在协程中启动一个新线程似乎有点傻,我错过了什么?

【问题讨论】:

    标签: android kotlin


    【解决方案1】:

    使用 try-finally 块

    finally {
       bCursor.close()
    }
    

    【讨论】:

      猜你喜欢
      • 2020-08-20
      • 2019-09-15
      • 2019-08-25
      • 1970-01-01
      • 1970-01-01
      • 2010-12-14
      • 1970-01-01
      • 1970-01-01
      • 2013-09-16
      相关资源
      最近更新 更多