我有一个 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)
}
知道我做错了什么。我真的很想从主要活动中触发它,但不知道为什么这不起作用。任何建议将不胜感激。提前致谢。