Android 未观察到设置LiveData的某些多个并发调用

Android 未观察到设置LiveData的某些多个并发调用,android,kotlin,android-livedata,android-viewmodel,mutablelivedata,Android,Kotlin,Android Livedata,Android Viewmodel,Mutablelivedata,我有一个打网络电话的功能。它可以在同一时间被多次调用,每次调用都可以并发运行 getDataTask() // it is subscribed on the background thread and observed on the main thread .subscribe( { result -> onResult(result) }, { onError() } ) .addToDisposables() 我能够检索数据,

我有一个打网络电话的功能。它可以在同一时间被多次调用,每次调用都可以并发运行

getDataTask() // it is subscribed on the background thread and observed on the main thread
    .subscribe(
        { result -> onResult(result) },
        { onError() }
    )
    .addToDisposables()
我能够检索数据,没有任何问题
onResult
函数将
ViewModel
中的
MutableLiveData
字段更新为

private val _data = MutableLiveData<Data>()
val data: LiveData<Data> get() = _data

private fun onResult(result: Data) = _data.post(result)

当背对背并发调用成功并尝试更新
\u data
字段时,我注意到观察者没有观察到一些结果。例如,有4个并发调用同时启动,然后它们尝试发布结果,但有1或2个结果未被观察到。我如何解决这个问题?任何帮助都将不胜感激。

我认为这个问题是由于
LiveData的性质造成的
LiveData
作为一个
可观察的视图持有者
只会发出它处理的最后一个值

现在我知道你在同时打电话,这没什么错。如果您想在网络中节省执行时间,那么这是一个不错的选择。但是,如果您希望此并发性与您的
LiveData
实例一起工作,并且希望您的
LiveData
在并发方法成功返回后立即发出它处理的每个值,那么您可能使用的
LiveData
是错误的

您正在寻找的是
LiveData的可观察性
。您可以免费获得与之捆绑在一起的
生命周期感知
部件,但它不是您常规的
可观察的
,而是只保留最后一个值的特殊部件


在您想要处理每一个值的情况下,最好使用
RxJava的Observable
。您还可以通过在您的
活动或片段中订阅和取消订阅
来了解it生命周期。在
中有这么多操作符,其中一个肯定会对您有所帮助,我认为是

您确定在viewModel中观察到了所有结果吗。我的意思是,可能很快就会有结果。LiveData作为一个可观察的ViewHolder,只需传递最新的值。尝试创建一个容器来记录来自可观察对象的所有值。在我看来,这类似于将LiveData视为可观察对象的情况。我只需要通过LiveData字段将结果传递给view。每个结果对应于将在Recyclerview行中设置的一组数据。请加入聊天,以便我能了解更多。谢谢你是不是真的把你的
LiveData
MutableLiveData
\u data
都命名了,或者这是打字错误?而且
\u data.post
应该是
\u data.postValue
viewModel.data.observe(viewLifecycleOwner, Observer { data -> // DO SOMETHING })