我的实时数据正在更新,但不会触发 android kotlin 中的观察者

问题描述 投票:0回答:0

我有一个 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)
}

知道我做错了什么。我真的很想从主要活动中触发它,但不知道为什么这不起作用。任何建议将不胜感激。提前致谢。

java android kotlin android-livedata mutablelivedata
© www.soinside.com 2019 - 2024. All rights reserved.