Wpis z mikrobloga

Cześć,

uczę się pisać apki w Kotlinie na Androidzie i próbuje napisać aplikację która łączy się z WebSocket i wyświetla na ekranie odebrane dane. Mam taki problem, że nie wiem jak dostać się z funkcji onMessage do obiektu wsMessage, który jest polem tekstowym na UI i tam podstawić odebraną wiadomość. Może źle do tego podchodzę?

class DeviceActivity : AppCompatActivity() {

private val client = OkHttpClient()

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

wsMessage.text = "no data"

connectToWs.setOnClickListener {
val request = Request.Builder().url("ws://192.168.4.1/").build()
val fwsListener = ForceWebSocketListener()
val webSocket = client.newWebSocket(request, fwsListener)
}
}

class ForceWebSocketListener() : WebSocketListener() {
override fun onOpen(webSocket: WebSocket, response: Response) {
}

override fun onMessage(webSocket: WebSocket?, text: String?) {

//??????

}

override fun onMessage(webSocket: WebSocket?, bytes: ByteString?) {
}

override fun onClosing(webSocket: WebSocket?, code: Int, reason: String?) {
webSocket!!.close(NORMAL_CLOSURE_STATUS, null)
}

companion object {
private val NORMAL_CLOSURE_STATUS = 1000
}

}

#android #kotlin #programowanie
  • 5
@popopopopopopo: pocztaj o Clean Architecture - wrzucanie wszystkiego do Activity to bardzo słaby pomysł. Ale do rzeczy - zbinduj sobie widok wykorzystując syntetyka (najlepiej z aliasem "as" w imporcie) i potem dostaniesz się do niego z każdej części Activity. Inny temat to kwestia wątków, pracujesz tylko na głównym? Komunikacja z WS powinna iść na osobnym - kolejna rzecz do doczytania to korutyny.
Korzystam z synthetic, mam dostęp do pola wsMessage w funkcji OnCreate, natomiast w onMessage otrzymuje błąd "none of the following candidates is applicable because of receiver type mismatch"

import kotlinx.android.synthetic.main.activity_device.*

wsMessage.text = "no data"

To moje pierwsze podejście do Androida i chyba mnie przerasta :/