【发布时间】: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
但是在协程中启动一个新线程似乎有点傻,我错过了什么?
【问题讨论】: