ably-java
ably-java copied to clipboard
Android: android.os.NetworkOnMainThreadException thrown when checking connectivity after transport unavailable.
I noticed an android.os.NetworkOnMainThreadException was thrown in my code when an ably publish was executed. Normally this does not happen, so I checked and inspected the full stacktrace (starting from the ably publish command):
Caused by android.os.NetworkOnMainThreadException
at android.os.StrictMode$AndroidBlockGuardPolicy.onNetwork(StrictMode.java:1605)
at com.android.org.conscrypt.Platform.blockGuardOnNetwork(Platform.java:431)
at com.android.org.conscrypt.ConscryptEngineSocket$SSLOutputStream.writeInternal(ConscryptEngineSocket.java:666)
at com.android.org.conscrypt.ConscryptEngineSocket$SSLOutputStream.access$200(ConscryptEngineSocket.java:625)
at com.android.org.conscrypt.ConscryptEngineSocket.drainOutgoingQueue(ConscryptEngineSocket.java:594)
at com.android.org.conscrypt.ConscryptEngineSocket.close(ConscryptEngineSocket.java:489)
at com.android.okhttp.internal.Util.closeQuietly(Util.java:95)
at com.android.okhttp.internal.http.StreamAllocation.deallocate(StreamAllocation.java:295)
at com.android.okhttp.internal.http.StreamAllocation.connectionFailed(StreamAllocation.java:332)
at com.android.okhttp.internal.http.HttpEngine.close(HttpEngine.java:591)
at com.android.okhttp.internal.huc.HttpURLConnectionImpl.execute(HttpURLConnectionImpl.java:513)
at com.android.okhttp.internal.huc.HttpURLConnectionImpl.getResponse(HttpURLConnectionImpl.java:411)
at com.android.okhttp.internal.huc.HttpURLConnectionImpl.getResponseCode(HttpURLConnectionImpl.java:542)
at com.android.okhttp.internal.huc.DelegatingHttpsURLConnection.getResponseCode(DelegatingHttpsURLConnection.java:106)
at com.android.okhttp.internal.huc.HttpsURLConnectionImpl.getResponseCode(HttpsURLConnectionImpl.java:30)
at io.ably.lib.http.HttpCore.readResponse(HttpCore.java:402)
at io.ably.lib.http.HttpCore.httpExecute(HttpCore.java:259)
at io.ably.lib.http.HttpCore.httpExecute(HttpCore.java:166)
at io.ably.lib.http.HttpCore.httpExecuteWithRetry(HttpCore.java:84)
at io.ably.lib.http.HttpHelpers.httpExecute(HttpHelpers.java:108)
at io.ably.lib.http.HttpHelpers.getUrl(HttpHelpers.java:57)
at io.ably.lib.http.HttpHelpers.getUrlString(HttpHelpers.java:45)
at io.ably.lib.transport.ConnectionManager.checkConnectivity(ConnectionManager.java:1427)
at io.ably.lib.transport.ConnectionManager.checkFallback(ConnectionManager.java:1236)
at io.ably.lib.transport.ConnectionManager.onTransportUnavailable(ConnectionManager.java:1312)
at io.ably.lib.transport.WebSocketTransport.send(WebSocketTransport.java:119)
at io.ably.lib.transport.ConnectionManager.sendImpl(ConnectionManager.java:1478)
at io.ably.lib.transport.ConnectionManager.send(ConnectionManager.java:1455)
at io.ably.lib.realtime.ChannelBase.publish(ChannelBase.java:906)
at io.ably.lib.realtime.ChannelBase.publish(ChannelBase.java:857)
at io.ably.lib.realtime.ChannelBase.publish(ChannelBase.java:824)
When I look at WebSocketTransport.java:119 it seems a WebsocketNotConnectedException was thrown in the send function. The onTransportUnavailable function checks the connectivity to check if a fallback is available. Is it possible this check results in the NetworkOnMainThreadException?