【问题标题】:Getting data from socket io kotlin从 socket io kotlin 获取数据
【发布时间】:2018-07-09 18:38:25
【问题描述】:

我想在 kotlin 中为 android 创建一个应用程序,并且我正在使用 socket io 从服务器获取数据。问题是,我在任何地方都找不到如何编写“socket.on”方法并对数据进行处理,只有 Java 中的“.emit”方法。你能帮帮我吗?

【问题讨论】:

    标签: android socket.io kotlin


    【解决方案1】:

    我已经这样做了:

    单身人士:

    class WebSocket{
    
    private var mSocket: Socket? = null
    
    companion object {
        @Volatile
        private var INSTANCE: WebSocket? = null
        fun getInstance() =
            INSTANCE ?: synchronized(this) {
                INSTANCE ?: WebSocket().also {
                    INSTANCE = it
                }
            }
    }
    
    fun createSocket(id:String) {
    
        val mUrl = "https://myserverurl"
    
        try {
            val opts = IO.Options()
            opts.forceNew = true
            opts.reconnection = true
            opts.secure = true
            opts.query = "id=${id}"
            mSocket = IO.socket(mUrl,opts)
            mSocket!!.connect()
        } catch (e: URISyntaxException) {
            e.printStackTrace()
        }
    
    }
    
    fun onNewMessage(cb:(fromId:String,
                         toId:String,
                         fromDeviceId:String,
                         senderName:String,
                         receiverName:String,
                         message:String,
                         productId:String,
                         timestamp:String ) -> Unit): Emitter.Listener {
    
        return Emitter.Listener { args ->
    
            val data = args[0] as JSONObject
    
            val senderName = data.getString("sender_name")
            val receiverName = data.getString("receiver_name")
            val message = data.getString("message")
            val fromId = data.getString("from_id")
            val toId = data.getString("to_id")
            val fromDeviceId = data.getString("from_device_id")
            val productId = data.getString("product_id")
            val timestamp = data.getString("timestamp")
    
            cb( fromId,
                toId,
                fromDeviceId,
                senderName,
                receiverName,
                message,
                productId,
                timestamp )
    
        }
    }
    
    fun getSocket():Socket? {
        return mSocket
    }
    
    }
    

    为我服务:

    WebSocket.getInstance().createSocket(userId!!)
        val io = WebSocket.getInstance().getSocket()
        //val notifications = NotificationsHandler()
    
        io!!.on("message",
            WebSocket.getInstance().onNewMessage { fromId, toId, fromDeviceId, senderName, receiverName, message, productId, timestamp ->
                
                //here you handle fromId, toId, fromDeviceId, senderName, receiverName, message, productId, timestamp
    
            })
    

    这样,您可以调用WebSocket.getInstance().getSocket()(在创建Socket 之后),并且套接字已准备好在任何活动中使用。

    【讨论】:

      猜你喜欢
      • 2011-08-14
      • 1970-01-01
      • 2021-04-16
      • 2020-07-21
      • 2019-06-19
      • 1970-01-01
      • 2015-09-05
      • 1970-01-01
      • 2013-01-15
      相关资源
      最近更新 更多