android - 缺少主调度程序的模块
问题描述
我正在尝试对我的本地数据库进行后台调用,并使用协程使用结果更新 UI。这是我的相关代码:
import kotlinx.coroutines.experimental.*
import kotlinx.coroutines.experimental.Dispatchers.IO
import kotlinx.coroutines.experimental.Dispatchers.Main
import kotlin.coroutines.experimental.CoroutineContext
import kotlin.coroutines.experimental.suspendCoroutine
class WarehousesViewModel(private val simRepository: SimRepository)
: BaseReactViewModel<WarehousesViewData>(), CoroutineScope {
private val job = Job()
override val coroutineContext: CoroutineContext
get() = job + Main
override val initialViewData = WarehousesViewData(emptyList())
override fun onActiveView() {
launch {
val warehouses = async(IO) { loadWarehouses() }.await()
updateViewData(viewData.value.copy(items = warehouses))
}
}
private suspend fun loadWarehouses(): List<Warehouse> =
suspendCoroutine {continuation ->
simRepository.getWarehouses(object : SimDataSource.LoadWarehousesCallback {
override fun onWarehousesLoaded(warehouses: List<Warehouse>) {
Timber.d("Loaded warehouses")
continuation.resume(warehouses)
}
override fun onDataNotAvailable() {
Timber.d("No available data")
continuation.resume(emptyList())
}
})
}
}
我的问题是我得到一个运行时异常:
java.lang.IllegalStateException: Module with Main dispatcher is missing. Add dependency with required Main dispatcher, e.g. 'kotlinx-coroutines-android'
我已经将这些添加到我的 gradle 中:
implementation 'org.jetbrains.kotlinx:kotlinx-coroutines-core:0.30.1'
implementation 'org.jetbrains.kotlinx:kotlinx-coroutines-android:0.26.0'
我对此有点陌生,有人可以帮助我吗?
解决方案
仅使用 kotlinx-coroutines-android 版本即可解决问题。
implementation 'org.jetbrains.kotlinx:kotlinx-coroutines-android:0.30.1'
推荐阅读
- json - 在 Jmeter 中使用带有 != 条件的 JsonPath 从 JSON 中提取一些值
- forms - 使用数据库的 Laravel 搜索表单
- r - 在 r 中读取多个 *.rtf 文件
- android - ListView 滚动条样式在小部件中无法正常工作
- python - 熊猫读取具有不同列数的多个表
- ionic-framework - 在变量中导入 ionic3 字体
- batch-file - 如何使用 rsync 而不是批量移入 for 循环
- python - 如何在 Python 中加载 JPEG XR 图像文件
- javascript - 如何改进我的 JavaScript 代码
- java - PageFactory 的存储元素