在 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
}
我想做的是将 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
}