Обновление пользовательского интерфейса в главном потоке из бесконечного потока l oop - PullRequest
0 голосов
/ 25 апреля 2020

Я пытаюсь постоянно прослушивать новые сообщения в сокете, и мне нужно обновлять свой интерфейс при получении новых данных. Приложение выдает ошибку при попытке доступа к представлениям, потому что я думаю, что я запускаю функцию в контексте фонового потока.

Можно ли заставить это работать с обратными вызовами?

fun updateUI(msg:String) {
        when (msg) {
            "2D Sketch" -> {
                group.removeAllViews()
                layoutInflater.inflate(R.layout.sketch_tools, group, true)
            }
            "Part" -> {
                group.removeAllViews()
                layoutInflater.inflate(R.layout.part_tools, group, true)
            }
            else -> {
            }
        }
    }

val listener = thread {
    while(true){
        val input = DataInputStream(BufferedInputStream(SocketHandler.socket.getInputStream()))
        val bytes = ByteArray(1024)
        input.read(bytes)
        val msg = bytes.toString(Charsets.UTF_8).replace("\u0000", "")
        updateUI(msg)
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...