Hello
I got java.lang.NullPointerException when extracting inputStream/outputStream from Socket in Socket connected event.
It was this line that threw the error:
The stacktrace is
At this point I’m trying to understand how pSocket can be null inside the Connected event, even though Successful = True and the event should only fire after the socket is initialized.
Has anyone seen this before?
A few things I’m unsure about:
I got java.lang.NullPointerException when extracting inputStream/outputStream from Socket in Socket connected event.
It was this line that threw the error:
B4X:
pStream.InitializePrefix(pSocket.InputStream,True,pSocket.OutputStream,"pStream")
Here is the complete connected event:
Private Sub pSocket_Connected (Successful As Boolean)
Log($"pSocket_Connected Successful: ${Successful}"$)
pConnecting = False
If Successful Then
If pStayConnected Then
pConnected = True
CallSubDelayed(mTarget,mEventName & "_Connected")
pStream.InitializePrefix(pSocket.InputStream,True,pSocket.OutputStream,"pStream")
Dim ser As B4XSerializator
Dim Bytes() As Byte = ser.ConvertObjectToBytes("Authenticate connection")
If pConnected Then pStream.Write(Cip.Encrypt(Bytes,pCipherPassword))
Log($"pRequestsEncrypted.size:${pRequestsEncrypted.Size}"$)
For Each id In pRequestsEncrypted.Keys
pRequestStartTimes.Put(id,DateTime.Now)
Dim data() As Byte = pRequestsEncrypted.Get(id)
pStream.Write(data)
pLastTimeDataIsSent = DateTime.Now
pLastDataSentWasAPing = (pRequestTargets.Get(id)=Me)
Next
broadcast.dbConnected(pStream)
Else
pSocket.Close
End If
End If
End Sub
The stacktrace is
B4X:
java.lang.NullPointerException: Attempt to invoke virtual method 'java.io.InputStream java.net.Socket.getInputStream()' on a null object reference
at anywheresoftware.b4a.objects.SocketWrapper.getInputStream(SocketWrapper.java:239)
at knutf.tractorOffice.dbconnection._psocket_connected(dbconnection.java:369)
at java.lang.reflect.Method.invoke(Native Method)
at anywheresoftware.b4a.BA.raiseEvent2(BA.java:221)
at anywheresoftware.b4a.BA$2.run(BA.java:395)
at android.os.Handler.handleCallback(Handler.java:761)
at android.os.Handler.dispatchMessage(Handler.java:98)
at android.os.Looper.loop(Looper.java:156)
at android.app.ActivityThread.main(ActivityThread.java:6623)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:942)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:832)
At this point I’m trying to understand how pSocket can be null inside the Connected event, even though Successful = True and the event should only fire after the socket is initialized.
Has anyone seen this before?
A few things I’m unsure about:
- Can the Java socket be disposed or closed before InitializePrefix runs, even when Successful is true?
- Is there any scenario where the wrapper triggers Connected but the underlying socket is already null?
- Should I explicitly check pSocket.IsInitialized or pSocket.Connected inside the event, or would that just mask a deeper issue?