缺少带有主调度程序的模块



经过研究,我仍然遇到这个问题,但这只发生在我的liveData被填充时。

我正在尝试做的是混合 LiveData 以仅从 ViewModel 到 UI 进行通信,并使用协程从我的服务器获取数据。

现在,我只是使用了迄今为止的所有 KTX 以使其更清晰

从我的用户界面中,我只是观察数据

viewModel.data.observe(this,Observer {...})

从我的ViewModel中,我只是启动了一个在IO上为网络请求执行的挂起函数,当emit()完成获取数据时,此liveData应返回

class MainViewModel: ViewModel(private val repo:Repo) {
val data = liveData(Dispatchers.IO) {
emit(repo.getUserData2())
}
}

现在,我只需从 Firebase 获取一些数据并将其返回给我的emit(),这样我就可以通知我的 LiveData 有关新值的信息。

在这里,我正在使用kotlinx-coroutines-androidkotlinx-coroutines-play-services在我的网络请求上使用.await()

suspend fun getUserData2(): MutableList<Houses> {
val houseList = mutableListOf<Houses>()
val snap = FirebaseFirestore.getInstance().collection("Houses").get().await()
for (houses in snap) {
val name = document.getString("houseName")
val color = document.getString("houseColor")
val house = Houses(name!!, color!!)
listData.add(house)
}
return houseList
}

问题是当它返回到

val data = liveData(Dispatchers.IO) {
emit(repo.getUserData2())
}

有了这个错误

java.lang.IllegalStateException:带有主调度程序的模块是 失踪。添加提供主调度程序的依赖项,例如 'Kotlinx-coroutines-android' at kotlinx.coroutines.internal.MissingMainCoroutineDispatcher.missing(MainDispatchers.kt:90( at kotlinx.coroutines.internal.MissingMainCoroutineDispatcher.isDispatchNeed(MainDispatchers.kt:71( at kotlinx.coroutines.DispatchedKt.resumeCancellable(Dispatched.kt:420( at kotlinx.coroutines.intrinsics.CancellableKt.startCoroutineCancellable(Cancellable.kt:26( at kotlinx.coroutines.BuildersKt__Builders_commonKt.withContext(Builders.common.kt:162( at kotlinx.coroutines.BuildersKt.withContext(Unknown Source:1( at androidx.lifecycle.LiveDataScopeImpl.emit(CoroutineLiveData.kt:97( at com.gaston.recyclerviewexample.viewmodel.MainViewModel$dataLive$1.invokeSuspend(MainViewModel.kt:18( at kotlin.coroutines.jvm.internal.BaseContinuationImpl.resumeWith(ContinuationImpl.kt:33( at kotlinx.coroutines.DispatchedTask.run(Dispatched.kt:241( at kotlinx.coroutines.scheduling.CoroutineScheduler.runSafely(CoroutineScheduler.kt:594( at kotlinx.coroutines.scheduling.CoroutineScheduler.access$runSafely(CoroutineScheduler.kt:60( at kotlinx.coroutines.scheduling.CoroutineScheduler$Worker.run(CoroutineScheduler.kt:740(

我的依赖项如下

implementation "androidx.lifecycle:lifecycle-extensions:2.1.0"
implementation "androidx.lifecycle:lifecycle-livedata-ktx:2.2.0-rc02"
implementation "androidx.lifecycle:lifecycle-viewmodel-ktx:2.2.0-rc02"
implementation 'org.jetbrains.kotlinx:kotlinx-coroutines-android:1.3.2'
implementation 'org.jetbrains.kotlinx:kotlinx-coroutines-play-services:1.1.1'

这是kotlinx.coroutines中的一个已知错误,您可以在此处找到问题:

https://github.com/Kotlin/kotlinx.coroutines/issues/1532

您需要降级到版本1.3.0

implementation "org.jetbrains.kotlinx:kotlinx-coroutines-android:1.3.0"

https://github.com/Kotlin/kotlinx.coroutines/issues/1532#issuecomment-536299897

或者等到版本1.3.3发布,因为它将具有修复程序。

https://github.com/Kotlin/kotlinx.coroutines/issues/1532#issuecomment-559089259

相关内容

  • 没有找到相关文章

最新更新