проблема:
у вас есть две большие ошибки
1-объявление веб-сокета в действии или фрагмент
2-использование в своем действии модель представления
объяснить концепцию:
1 - вам нужно объявить отдельный класс для реализации веб-сокета (создать экземпляр, прослушать, вызвать, подключить и отключить), чтобы применить один принцип ответственности
2-В MVVM отношение между видом и моделью представления является однонаправленным, наблюдайте наблюдаемую модель внутреннего вида, но модель представления не имеет ссылки на представление, в отличие от отношения MVP, являющегося направлением 2, поэтому не следует объявлять основная деятельность в модели сбоку
Решение:
класс с 1 разъемом
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-активность
viewModel.receiveMessageResponse.observe(this, Observer {
//use the received message here
})
Заключение:
socketService ------> просмотреть модель ----------> действие
активность <-------- viewmodel <------------- socketService </p>