Android / Kotlin обновление пользовательского интерфейса из входящего веб-сокета - LiveData - PullRequest
0 голосов
/ 14 января 2020

Я пытаюсь обновить свой интерфейс при получении строки JSON из соединения WebSocket. У меня есть следующие настройки:

MainActivity.kt

override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)

        viewModel.getMessage().observe(this@MainActivity, Observer {
                json -> Log.d("websockets", "Json string: $json")
                output.text = json

        })

ViewModel.kt

var jsonString = MutableLiveData<String>()
fun updateMessageFromWebSockets(string: String) {
    jsonString.postValue(string)
}

fun getMessage(): LiveData<String> {
    return jsonString
}

WebsocketManager.kt

override fun onMessage(webSocket: WebSocket, text: String) {
        d("websockets", "here's the text: $text")
        val mainViewModel = MainViewModel()
        mainViewModel.updateMessage(text)
    }

Теперь я Я могу сделать тост с этим текстом из моей модели представления, используя входящую строку json, чтобы я знал, что соединение с веб-сокетом настроено правильно, и я получаю данные, однако, я не могу больше ничего делать, в идеале, я хочу создавать алерты и диалоги, закусочные и др. c, но без запуска непосредственно из основной деятельности.

Правильно ли настроены мои liveata? Мои взгляды сохраняются, когда я набираю текст и поворачиваю экран, но наблюдаемое у меня, кажется, не работает. Моя идея заключается в том, что моя наблюдаемая будет запускать функцию диалога из MainActivity, когда она наблюдает за изменением строки (строка всегда будет уникальной и всегда одинаковой).

Спасибо

...