socketio / socket.io-client-java

Full-featured Socket.IO Client Library for Java, which is compatible with Socket.IO v1.0 and later.
https://socketio.github.io/socket.io-client-java/installation.html
Other
5.32k stars 972 forks source link

Always Crash on Connect #642

Closed faizalmp closed 2 years ago

faizalmp commented 3 years ago

I struggled with this error report and get nothing wrong in my code. I implement my socket client in my fragment. I use version 1.0.1 of this library and use version 2.3.0 at my Node.js server.

2020-12-11 17:12:14.567 21432-21557/com.example.myapp E/EventThread: Task threw exception
    java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.String java.lang.Object.toString()' on a null object reference
        at io.socket.client.Socket.onevent(Socket.java:337)
        at io.socket.client.Socket.onpacket(Socket.java:289)
        at io.socket.client.Socket.access$100(Socket.java:24)
        at io.socket.client.Socket$2$2.call(Socket.java:120)
        at io.socket.emitter.Emitter.emit(Emitter.java:117)
        at io.socket.client.Manager.ondecoded(Manager.java:431)
        at io.socket.client.Manager.access$1600(Manager.java:30)
        at io.socket.client.Manager$7.call(Manager.java:407)
        at io.socket.parser.IOParser$Decoder.add(IOParser.java:105)
        at io.socket.client.Manager.ondata(Manager.java:423)
        at io.socket.client.Manager.access$1000(Manager.java:30)
        at io.socket.client.Manager$2.call(Manager.java:374)
        at io.socket.emitter.Emitter.emit(Emitter.java:117)
        at io.socket.engineio.client.Socket.onPacket(Socket.java:551)
        at io.socket.engineio.client.Socket.access$1000(Socket.java:36)
        at io.socket.engineio.client.Socket$5.call(Socket.java:335)
        at io.socket.emitter.Emitter.emit(Emitter.java:117)
        at io.socket.engineio.client.Transport.onPacket(Transport.java:126)
        at io.socket.engineio.client.Transport.onData(Transport.java:118)
        at io.socket.engineio.client.transports.WebSocket.access$100(WebSocket.java:24)
        at io.socket.engineio.client.transports.WebSocket$1$2.run(WebSocket.java:71)
        at io.socket.thread.EventThread$2.run(EventThread.java:80)
        at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1167)
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:641)
        at java.lang.Thread.run(Thread.java:764)
2020-12-11 17:12:14.570 21432-21557/com.example.myapp E/AndroidRuntime: FATAL EXCEPTION: EventThread
    Process: com.example.myapp, PID: 21432
    java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.String java.lang.Object.toString()' on a null object reference
        at io.socket.client.Socket.onevent(Socket.java:337)
        at io.socket.client.Socket.onpacket(Socket.java:289)
        at io.socket.client.Socket.access$100(Socket.java:24)
        at io.socket.client.Socket$2$2.call(Socket.java:120)
        at io.socket.emitter.Emitter.emit(Emitter.java:117)
        at io.socket.client.Manager.ondecoded(Manager.java:431)
        at io.socket.client.Manager.access$1600(Manager.java:30)
        at io.socket.client.Manager$7.call(Manager.java:407)
        at io.socket.parser.IOParser$Decoder.add(IOParser.java:105)
        at io.socket.client.Manager.ondata(Manager.java:423)
        at io.socket.client.Manager.access$1000(Manager.java:30)
        at io.socket.client.Manager$2.call(Manager.java:374)
        at io.socket.emitter.Emitter.emit(Emitter.java:117)
        at io.socket.engineio.client.Socket.onPacket(Socket.java:551)
        at io.socket.engineio.client.Socket.access$1000(Socket.java:36)
        at io.socket.engineio.client.Socket$5.call(Socket.java:335)
        at io.socket.emitter.Emitter.emit(Emitter.java:117)
        at io.socket.engineio.client.Transport.onPacket(Transport.java:126)
        at io.socket.engineio.client.Transport.onData(Transport.java:118)
        at io.socket.engineio.client.transports.WebSocket.access$100(WebSocket.java:24)
        at io.socket.engineio.client.transports.WebSocket$1$2.run(WebSocket.java:71)
        at io.socket.thread.EventThread$2.run(EventThread.java:80)
        at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1167)
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:641)
        at java.lang.Thread.run(Thread.java:764)
2020-12-11 17:12:14.578 21432-21558/com.example.myapp E/EventThread: Task threw exception
    java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.String java.lang.Object.toString()' on a null object reference
        at io.socket.client.Socket.onevent(Socket.java:337)
        at io.socket.client.Socket.onpacket(Socket.java:289)
        at io.socket.client.Socket.access$100(Socket.java:24)
        at io.socket.client.Socket$2$2.call(Socket.java:120)
        at io.socket.emitter.Emitter.emit(Emitter.java:117)
        at io.socket.client.Manager.ondecoded(Manager.java:431)
        at io.socket.client.Manager.access$1600(Manager.java:30)
        at io.socket.client.Manager$7.call(Manager.java:407)
        at io.socket.parser.IOParser$Decoder.add(IOParser.java:105)
        at io.socket.client.Manager.ondata(Manager.java:423)
        at io.socket.client.Manager.access$1000(Manager.java:30)
        at io.socket.client.Manager$2.call(Manager.java:374)
        at io.socket.emitter.Emitter.emit(Emitter.java:117)
        at io.socket.engineio.client.Socket.onPacket(Socket.java:551)
        at io.socket.engineio.client.Socket.access$1000(Socket.java:36)
        at io.socket.engineio.client.Socket$5.call(Socket.java:335)
        at io.socket.emitter.Emitter.emit(Emitter.java:117)
        at io.socket.engineio.client.Transport.onPacket(Transport.java:126)
        at io.socket.engineio.client.Transport.onData(Transport.java:118)
        at io.socket.engineio.client.transports.WebSocket.access$100(WebSocket.java:24)
        at io.socket.engineio.client.transports.WebSocket$1$2.run(WebSocket.java:71)
        at io.socket.thread.EventThread$2.run(EventThread.java:80)
        at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1167)
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:641)
        at java.lang.Thread.run(Thread.java:764)
darrachequesne commented 3 years ago

Hi! Could you please provide the code of your Socket.IO server?

darrachequesne commented 3 years ago

Update: I could indeed reproduce with the following server code:

io.on('connection', (socket) => {
  socket.emit(null);
});

I'm not sure if it's worth fixing though.

faizalmp commented 3 years ago

Hi, thank you for replied my issue. I realize It happens when I want to pass JSONArray in the socket message. It works well when I pass JSONObject.

iagormoraes commented 3 years ago

I realize that the crashes happens when you pass in JSONArray a null value directly, if the array is wrapped in a JSONObject the problem solves.

UPDATE: if you emit from server in the following cases below will throw the exception:

darrachequesne commented 2 years ago

For future readers:

This should be fixed in version 2.0.1: https://github.com/socketio/socket.io-client-java/commit/e8ffe9d1383736f6a21090ab959a2f4fa5a41284

Please reopen if needed.