在 Viewmodel 中调用 Mainactivity(更新)
Calling Mainactivity inside Viewmodel(updated)
对于MVVM架构,需要在ViewModel
class中调用一个WebSocket
变量。
而我的 WebSocket
服务是在 MainActivity
中声明的。
所以,MainActivity
需要在ViewModel
中实例化。
我试图声明一个实例::
'''
(activity 作为 MainActivity)
'''
在我的 ViewModel class 中,但这会引发错误。
我想我声明 LiveData
变量的方式并不是最好的。我只想访问温度变量的静态数据(6 个列表。但是 MutableLiveData<List<Int>>
并没有真正解决。
还请建议我还能如何让我的 ViewModel
和 WebSocket 相互通信。
提前致谢。
问题:
你有两个大错误
1-在activity或片段
中声明web web Socket
2-在其视图模型中使用 activity
解释概念:
1-你必须声明分离 class 到 web socket 实现(创建实例、监听、调用、连接和断开连接)以应用单一责任原则
2-在 MVVM 中,视图和视图模型之间的关系是一个方向 view observe observable inside view model,但是视图模型没有对 view 的引用,这与 MVP 关系是 2 个方向,所以你不应该声明你的 main activity 侧视图模型
解法:
1 个插槽 class
class SocketService{
companion object {val instance :SocketService}
fun connect()
fun disconnect()
fun sendMessage(invokeMethodName:String,data:JsonObject)
fun subscribe(listenMethodName:String,listner:Listner)
}
2 视图模型
val receiveMessageResponse = MutableLiveData<String>()
SocketService.instance!!.subscribe(RECEIVE_MESSAGE, HubEventListener {
receiveMessageResponse.postValue(it)
})
3-activity
viewModel.receiveMessageResponse.observe(this, Observer {
//use the received message here
})
结论:
socketService ------> 视图模型 ----------> activity
activity <-------- 视图模型 <------------ socketService
对于MVVM架构,需要在ViewModel
class中调用一个WebSocket
变量。
而我的 WebSocket
服务是在 MainActivity
中声明的。
所以,MainActivity
需要在ViewModel
中实例化。
我试图声明一个实例:: ''' (activity 作为 MainActivity) ''' 在我的 ViewModel class 中,但这会引发错误。
我想我声明 LiveData
变量的方式并不是最好的。我只想访问温度变量的静态数据(6 个列表。但是 MutableLiveData<List<Int>>
并没有真正解决。
还请建议我还能如何让我的 ViewModel
和 WebSocket 相互通信。
提前致谢。
问题:
你有两个大错误
1-在activity或片段
中声明web web Socket2-在其视图模型中使用 activity
解释概念:
1-你必须声明分离 class 到 web socket 实现(创建实例、监听、调用、连接和断开连接)以应用单一责任原则
2-在 MVVM 中,视图和视图模型之间的关系是一个方向 view observe observable inside view model,但是视图模型没有对 view 的引用,这与 MVP 关系是 2 个方向,所以你不应该声明你的 main activity 侧视图模型
解法:
1 个插槽 class
class SocketService{
companion object {val instance :SocketService}
fun connect()
fun disconnect()
fun sendMessage(invokeMethodName:String,data:JsonObject)
fun subscribe(listenMethodName:String,listner:Listner)
}
2 视图模型
val receiveMessageResponse = MutableLiveData<String>()
SocketService.instance!!.subscribe(RECEIVE_MESSAGE, HubEventListener {
receiveMessageResponse.postValue(it)
})
3-activity
viewModel.receiveMessageResponse.observe(this, Observer {
//use the received message here
})
结论:
socketService ------> 视图模型 ----------> activity
activity <-------- 视图模型 <------------ socketService