如何解决CoroutineLiveData发出null
我正在学习 Android LiveData 。我有代码
private lateinit var questionCounterTotal: LiveData<Int>
片段内的 的onCreateView
:
questionList = questionViewModel.getAllQuestions()
questionCounterTotal = liveData { emit(44) }
//this line prints null
questionCounterTotal.observe(viewLifecycleOwner,Observer<Int>{value->
Log.d("amin",value.toString())
})
//this line prints null too
Log.d("amin",questionCounterTotal.value.toString())
正如注释所述,当代码托管在 Fragment 中时,我无法打印questionCouterTotal
值,但是如果代码位于 Activity 。我在做什么错了?
解决方法
这是因为 LiveData 值只有在其观察者处于活动状态时才会发出。来自documentation:
如果LiveData的生命周期处于STARTED或RESUMED状态,则它认为由Observer类表示的观察者处于活动状态。
让我添加额外的日志来证明上述内容。
override fun onViewCreated(view: View,savedInstanceState: Bundle?) {
super.onViewCreated(view,savedInstanceState)
val questionCounterTotal = liveData {
Log.d("amin","Emitting 44")
emit(44)
}
Log.d("amin","The line after liveData { }")
questionCounterTotal.observe(viewLifecycleOwner,Observer<Int>{ value->
Log.d("amin","Observing value: $value")
})
Log.d("amin","onViewCreated: ${questionCounterTotal.value.toString()}")
}
override fun onStart() {
super.onStart()
Log.d("amin","onStart")
}
给出以下输出:
D/amin: The line after liveData { }
D/amin: onViewCreated: null
D/amin: onStart
D/amin: Emitting 44
D/amin: Observing value: 44
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。