首页 > 解决方案 > 如何在 Coroutine Kotlin 中发送对象?

问题描述

我开始在 Kotlin 中使用协程,我想将片段中的一个对象作为参数传递,但我仍然不太了解这个对象是如何发生在这个协程上的,我真的很感谢你的帮助

val addObject: LiveData<Object> = liveData {
    emit(Result.loading())
    try {
        emit(Result.success(fetchUser()))
    } catch(ioException: Exception) {
        emit(Result.error(ioException))
    }
}

从我的片段中,我必须发送我的对象,然后才能观察它

productViewModel.addObject(Object).observe

标签: androidkotlinkotlin-coroutines

解决方案


你不能在一个甚至没有意义的参数中传递一个对象。

你可能想要做的是这样的

视图模型

private val _liveData: MutableLiveData<Object> = MutableLiveData()
val liveData:LiveData<Object>
    get() = _liveData

fun addObject(myObject:Object){
    // do work here
    emit(someData)
}

甚至只是

fun addObject(myObject:Object):LiveData<Object>{
    val liveData: MutableLiveData<Object> = MutableLiveData()
    viewModelScope.launch {
        //do work then emit back
        liveData.postValue(it)
    }
    return liveData
}

活动

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

viewModel.addObject(myObject)

或者对于第二个例子

viewModel.addObject(myObject).observe(this, Observer{
    
})

推荐阅读