ably-java icon indicating copy to clipboard operation
ably-java copied to clipboard

Android: android.os.NetworkOnMainThreadException thrown when checking connectivity after transport unavailable.

Open hans-de-clercq opened this issue 3 years ago • 0 comments

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?

┆Issue is synchronized with this Jira Task by Unito

hans-de-clercq avatar Jun 10 '22 08:06 hans-de-clercq