在 Kotlin 中将 ArrayList<Model> 转换为 MutableLiveData<ArrayList<Model>>

Convert ArrayList<Model> to MutableLiveData<ArrayList<Model>> in Kotlin

我想做的是将 ArrayList<Model> 转换为 MutableLiveData<ArrayList<Model>> 以作为 return 值发送。虽然我得到了正确的 ArrayList<Model> 结果,但我在将值发布到 MutableLiveData<ArrayList<Model>> 时惨遭失败。

这就是我想要做的...

suspend fun getSeasonBodyWeight(): MutableLiveData<ArrayList<MSBodyWeight>> {
    val x = MutableLiveData<ArrayList<MSBodyWeight>>()
    val y:ArrayList<MSBodyWeight> = getBWeightCoroutine()
    x.postValue(y)
    Log.i(TAG, "Check ${y.size}")
    Log.i(TAG, "Check ${x.value}")
    return x
}

这就是我得到的 Logcat

I/FirebaseConnect: Check 2
I/FirebaseConnect: Check null

所以我做错了什么。还有如何将 ArrayList<Model> 转换为 MutableLiveData<ArrayList<Model>>

我正在努力学习 Kotlin。如果是菜鸟问题,请多多包涵。

谢谢

使用 postValue 时,如果您查看源代码,您会在方法描述中找到:

Posts a task to a main thread to set the given value.

表示不会立即设置该值,它会启动一个任务来更改它。如果你想立即更改值,你应该使用:

x.value = y

两者之间的区别在于您不能从后台线程调用 setValue,也就是说,如果您在后台线程中,则应该调用 postValue。如果你在主线程setValue可能会用到

suspend fun getSeasonBodyWeight(): MutableLiveData<ArrayList<MSBodyWeight>> {
    val x = MutableLiveData<ArrayList<MSBodyWeight>>()
    x.value = arrayListOf();
    val y:ArrayList<MSBodyWeight> = getBWeightCoroutine()
    x.postValue(y)
    Log.i(TAG, "Check ${y.size}")
    Log.i(TAG, "Check ${x.value}")
    return x
}