private var Name = mutableListOf<String>()
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
viewModelFactory = MainViewModelFactory(repository)
viewModel = ViewModelProvider(this,viewModelFactory).get(MainViewModel::class.java)
// viewmodel data
setContent {
SimpleStockInfoTheme {
viewModel.getData().observe(this, Observer {
Name.add(it)
Log.d("EROR", Name.toString())
})
Log.d("EROR2", Name.toString())
InfoCard(name = "dad", data = 1442.32 )
}
}
在Observer范围中,全局变量Name(mutableList(有一个值(it(。但除此之外,Name是空的List。。为什么会发生这种情况??
在Observer作用域中,全局变量Name(mutableList(有一个值(it(。但除此之外,名称为空列表
Name
列表在observer
块之外为空,因为语句的执行顺序不同。
首先执行observer
外部的Log
语句,然后执行观察者博客内部的Log
语句。这里发生的情况是,所有Live Data
观察器都会首先注册,当同步代码的执行完成后,观察器代码的执行就会开始。
suspending
函数也是如此,它们只有在所有同步代码执行完成后才会开始执行
一旦it
被添加到observer
块中的Name
,之后访问Name
将不会返回empty list
。