【问题标题】:Kotlin Activity cannot be null with Websocket使用 Websocket 时,Kotlin Activity 不能为空
【发布时间】:2020-12-30 20:51:04
【问题描述】:

当建立 websocket 连接时,我想使用 Alerter(UI) 库显示连接成功的警报消息。但是每次我想显示消息时它都会崩溃。 它给了我错误:“活动不能为空”可能是因为我从另一个类调用了该函数。

这是代码。

class MainInstall : Fragment() {

    
         ...


    override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
        super.onViewCreated(view, savedInstanceState)


        btnConnect.setOnClickListener {
            val checkUri = hostnameInput.text.toString()

                checkConnection(checkUri)

        }
        

    }



    private fun checkConnection(url:String){

        val request = Request.Builder()
            .url("wss://$url/temp/true")
            .build()
        val wsClien = client.newWebSocket(request, EchoWebSocketListener())

    }
    

    fun alertBericht(){
        Alerter.create(activity)
            .setTitle("Alert Title")
            .setText("Alert text succesfull")
            .show()
    }

}




class EchoWebSocketListener : WebSocketListener() {
    override fun onOpen(webSocket: WebSocket, response: Response) {
        output("Connected")
        MainInstall().alertBericht()
    }
  ...
}

当 Class 不是 Main 时如何更新我的 UI?

提前谢谢你。

【问题讨论】:

    标签: android android-layout kotlin android-fragments websocket


    【解决方案1】:

    MainInstall中实现监听器:

    class MainInstall : Fragment() {
        private val listener = object : WebSocketListener() {
            override fun onOpen(webSocket: WebSocket, response: Response) {
                output("Connected")
                alertBericht()
            }  
            ...
        }
    }
    

    然后更新checkConnection():

    val wsClien = client.newWebSocket(request, listener)
    

    【讨论】:

    • 谢谢@veritas1,它就像一个魅力,输出动作的好方法;)
    猜你喜欢
    • 2018-12-08
    • 1970-01-01
    • 1970-01-01
    • 2018-05-04
    • 2022-01-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多