我有一个livedata变量,我一直在监听我的主活动,以在UI线程中执行一些操作,但不幸的是,它没有被触发。请注意,方法test()是从用于webview通信的Javascript接口调用的。
这是我已经实现的,
class MainViewModel(){
.
.
.
var data = MutableLiveData<String>();
fun test(value: String){
data.value = DataProtocol(
"sample",
arrayOf("CONNECTED")).toString()
}
}
这是我的第一次尝试,但我得到一个错误
java.lang.IllegalStateException:无法在后台线程上调用setValue
接下来我试着这么做
fun test(value: String){
data.postValue(DataProtocol(
"sample",
arrayOf("CONNECTED")).toString())
}
还是没有更新,然后我试着这样做,
fun test(value: String){
viewModelScope.launch {
withContext(Dispatchers.Main) {
data.postValue(DataProtocol(
"sample",
arrayOf("CONNECTED")).toString())
}
}
}
最后我别无选择。
这是我如何从主要活动中听它
this.viewModel.data.observe(this) { d ->
println("RECIEVED DATA " + d)
}
任何想法我做错了什么。我真的很想得到这个从主要活动触发,但不知道为什么这是不工作。任何建议将不胜感激。提前感谢。
1条答案
按热度按时间ybzsozfc1#
您附加了代码的不完整部分,因此很难从这些片段中检测出您所面临的问题。
不过,我已经为您编写了一些工作代码,因此您可以将其与您的代码进行比较,以确定问题所在。希望对您有所帮助。
下面是工作代码:
MainActivity.kt:
MainViewModel.kt:
因此,在日志中显示2个字符串: