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 )
}
}
In Observer scope, global variable Name(mutableList) have a value (it). but outside of that, Name is empty List.. Why this situation happended??
CodePudding user response:
In Observer scope, global variable Name(mutableList) have a value (it). but outside of that, Name is empty List
Name list is empty outside of the observer block because of the execution order of the statements.
Log statement outside of the observer executes first, then the Log statement inside of the observer blog gets executed. What happens here is, all Live Data observers get registered first, and when the execution of synchronous code gets completed, after the execution of observer code starts.
This goes for suspending functions too, they would only start executing after all synchronous code execution completes
Once it is added to the Name in the observer block, accessing Name after that won't return an empty list.
