Android 从kotlin中的非UI线程编辑livedata

Android 从kotlin中的非UI线程编辑livedata,android,multithreading,kotlin,viewmodel,android-livedata,Android,Multithreading,Kotlin,Viewmodel,Android Livedata,我正在设计一个带有蓝牙连接的应用程序,用于显示从BT接收到的一些数据。我想使用androidsLiveData在布局和类之间进行通信 我有一个专用(非UI)线程,用于管理与蓝牙适配器的连接,该适配器负责接收和发送数据。我现在有一个问题,因为我无法从该线程编辑LiveData。我有以下用于编辑LiveData的代码: class ConnectThread(device: BluetoothDevice): Thread() { ... private lateinit var model:

我正在设计一个带有蓝牙连接的应用程序,用于显示从BT接收到的一些数据。我想使用androids
LiveData
在布局和类之间进行通信

我有一个专用(非UI)线程,用于管理与蓝牙适配器的连接,该适配器负责接收和发送数据。我现在有一个问题,因为我无法从该线程编辑
LiveData
。我有以下用于编辑
LiveData
的代码:

class ConnectThread(device: BluetoothDevice): Thread()
{
 ...
 private lateinit var model: MainViewModel
 override fun run() {
       model = ViewModelProviders.of(this).get(MainViewModel::class.java)
       model.frontleft.postValue("hello")
    ...
    }
 }
我可以编辑
LiveData
,在我的活动中使用上面的代码,布局(UI)没有问题。但是在我的连接线程中,我在模型代码的
(this)
部分得到了以下错误:

这是我的
视图模型

class MainViewModel : ViewModel() {
   val frontleft: MutableLiveData<String> by lazy {
       MutableLiveData<String>()
   }
}
class MainViewModel:ViewModel(){
val frontleft:lazy提供的可变LiveData{
MutableLiveData()
}
}

我对我的问题做了相当多的研究,但找不到答案。是因为我想从非UI线程/碎片/活动编辑LiveData吗?或者因为线程运行在代码的不同部分?

这指向当前的
上下文
,因此如果您的代码处于片段或活动中,您可以像这样访问它的
上下文
this@YourFragmentName,
this@YuorActivityName
您还可以检查
ViewModelProviders

ViewModelProviders.of(this.get)(MainViewModel::class.java)
在这里更改此设置

ViewModelProviders.of(this.get)(model::class.java)在内部使用一个retainFragment。您需要以某种方式将该值发送给构造函数,或者设置一个公共的可观察属性,以从线程设置一个属性,并在viewmodel中使用该属性

var myObservable by Delegates.Observables(“”{{uu,{uu,{uu->“hello”}


类似这样的内容

在此@之后我应该添加哪些活动名称?在中创建ViewModel的视图或?所以我需要做:
model=ViewModelProviders.of(this@activity).get(MainViewModel::class.java)
yes与
ViewModel
关联的那一个,因此我有一个文件“BluetoothService.kt”,其中有函数
class ConnectThread…
class MainViewModel
。。。但无法访问它。它不使用保留片段,因为您不需要扩展
LifecycleActivity
。它使用非配置实例。