Socket.io连接问题

时间:2019-03-06 11:10:33

标签: android socket.io okhttp3

我正在使用 Socket.io 进行一对一聊天。我以前用过,但从未遇到过此类问题。显示以下错误后,我的应用程序崩溃了。

我遇到的错误

 java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.String okhttp3.MediaType.toString()' on a null object reference
        at io.socket.engineio.client.transports.PollingXHR$Request.onLoad(PollingXHR.java:271)
        at io.socket.engineio.client.transports.PollingXHR$Request.access$700(PollingXHR.java:148)
        at io.socket.engineio.client.transports.PollingXHR$Request$1.onResponse(PollingXHR.java:232)
        at okhttp3.RealCall$AsyncCall.execute(RealCall.java:216)
        at okhttp3.internal.NamedRunnable.run(NamedRunnable.java:32)
        at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112)
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587)
        at java.lang.Thread.run(Thread.java:818)

到目前为止我做了什么?

try {
            val user_email = preferenceManager.getLoggedInUserEmail()
            val ioOption = IO.Options()
            ioOption.query = "username=anyemail"
            ioOption.secure =true
            ioOption.reconnection=true

            SocketConstants.socketIOClient = IO.socket(SocketConstants.SOCKET_URL, ioOption)
            SocketConstants.socketIOClient?.on(Socket.EVENT_CONNECT, object : Emitter.Listener {
                override fun call(vararg args: Any) {
                    SocketConstants.isSocketConnecting = false
                    Log.i(TAG, "Socket Connected Outside login check...."+args.size)
                }

            })
   SocketConstants.socketIOClient!!.connect()
        } catch (e: Exception) {
            e.printStackTrace()
        }

崩溃前我正在获取此日志 套接字已连接外部登录检查。...

能请你帮我吗?

2 个答案:

答案 0 :(得分:0)

我已经解决了我的问题。我不知道该解决方案是否可以解决其他面临的问题,但这对我有用。

我所做的是

val ioOption = IO.Options()
            ioOption.query = "username=$user_email"
            ioOption.secure = true
            ioOption.reconnection = true
            ioOption.transports = arrayOf(WebSocket.NAME)

            SocketConstants.socketIOClient = IO.socket(SocketConstants.SOCKET_URL, ioOption)

ioOption.transports = arrayOf(WebSocket.NAME)

此行解决了我的问题。只需将trasports添加为“ WebSocket”即可。

希望这对其他遇到相同问题的人也有用。

答案 1 :(得分:0)

他们发布了新版本 1.0.1,修复了错误 https://github.com/socketio/engine.io-client-java/commit/6f065b7a62603730979d43cec71af0046ca4ab7c(29 天前)。如果您尝试使用 v2.0.0,请小心,我无法接收套接字消息,所以我使用了 1.0.1