繁体   English   中英

在设置观察块内的变量值后获取 null 值

[英]Getting null value after setting the value of a variable inside observe block

在我的用户界面中 - MainActivity.kt

我有:

private var recommendationCount: Int? = null

onCreate{
   
   viewmodel.recommended.observe(this){
      recommendationCount = it.size
   }
   
   //I need to set the view outside the observe
   binding.myTextView.text = recommendationCount.toString()
   
   //it returns null
  
}

当我在观察块之外设置我的 textview 时,它返回一个 null 值。 但是当我在里面设置它时,它会返回正确的值。

我需要把它放在外面。

您不能仅仅因为 onCreate() 会在 viewModel 更改您在 onCreate() 中观察到的 Observable(我猜是实时数据)的值之前执行其中的所有代码作为解决方案,所以您不能将其设置在观察者之外作为解决方案,您可以给出您的变量是一个默认值,当 viewModel 更改 Observable 的值时,它将在观察者块中更改(我猜是实时数据)

由于要合并来自多个 LiveData 的值,因此需要将它们组合成一个 LiveData。 您不能只按顺序从每个数据中获取数据,因为 LiveData 并非旨在同步工作(您可以使用value属性,但这并不可靠,因为可以在设置初始值之前检查该值)。

您需要通过合并将它们组合成一个 LiveData 或 Flow。 它可以通过使用 MediatorLiveData 的 LiveData 完成,但使用 Flows 更容易,因为您可以使用combine function。 你可以做这样的事情,将流转换回 LiveData 以避免使用协程:

val combinedLiveData = combine(
        liveDataA.asFlow(), 
        liveDataB.asFlow(), 
        liveDataC.asFlow()
    ) { a, b, c -> 
        a + b + c 
    }.asLiveData()

但如果您使用协程,则无需转换回 LiveData。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM