codenameone / CodenameOne

Cross-platform framework for building truly native mobile apps with Java or Kotlin. Write Once Run Anywhere support for iOS, Android, Desktop & Web.

Home Page:https://www.codenameone.com/

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

RequestBuilder dont catch network error

zakhdar opened this issue · comments

Dear,
I have the same problem mentionned in #2726 with Coderad2, when I make an external call (Rest.post(....)) if the server is offline I get an error of the type

[EDT] 0:0:6,666 - Exception: java.net.ConnectException - Connection refused: connect
java.net.ConnectException: Connection refused: connect
	at java.base/java.net.PlainSocketImpl.connect0(Native Method)
	at java.base/java.net.PlainSocketImpl.socketConnect(PlainSocketImpl.java:101)
	at java.base/java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:399)
	at java.base/java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:242)
	at java.base/java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:224)
	at java.base/java.net.Socket.connect(Socket.java:609)
	at java.base/java.net.Socket.connect(Socket.java:558)
	at java.base/sun.net.NetworkClient.doConnect(NetworkClient.java:182)
	at java.base/sun.net.www.http.HttpClient.openServer(HttpClient.java:474)
	at java.base/sun.net.www.http.HttpClient.openServer(HttpClient.java:569)
	at java.base/sun.net.www.http.HttpClient.<init>(HttpClient.java:242)
	at java.base/sun.net.www.http.HttpClient.New(HttpClient.java:341)
	at java.base/sun.net.www.http.HttpClient.New(HttpClient.java:362)
	at java.base/sun.net.www.protocol.http.HttpURLConnection.getNewHttpClient(HttpURLConnection.java:1253)
	at java.base/sun.net.www.protocol.http.HttpURLConnection.plainConnect0(HttpURLConnection.java:1187)
	at java.base/sun.net.www.protocol.http.HttpURLConnection.plainConnect(HttpURLConnection.java:1081)
	at java.base/sun.net.www.protocol.http.HttpURLConnection.connect(HttpURLConnection.java:1015)
	at java.base/sun.net.www.protocol.http.HttpURLConnection.getOutputStream0(HttpURLConnection.java:1367)
	at java.base/sun.net.www.protocol.http.HttpURLConnection.getOutputStream(HttpURLConnection.java:1342)
	at com.codename1.impl.javase.JavaSEPort.openOutputStream(JavaSEPort.java:9976)
	at com.codename1.io.ConnectionRequest.performOperationComplete(ConnectionRequest.java:875)
	at com.codename1.io.NetworkManager$NetworkThread.runCurrentRequest(NetworkManager.java:314)
	at com.codename1.io.NetworkManager$NetworkThread.run(NetworkManager.java:390)
	at com.codename1.impl.CodenameOneThread.run(CodenameOneThread.java:176)

and if I disable the network in the simulator I get the following error:

[EDT] 0:0:50,636 - Exception: java.io.IOException - Unreachable
java.io.IOException: Unreachable
	at com.codename1.impl.javase.JavaSEPort.connect(JavaSEPort.java:9739)
	at com.codename1.impl.javase.JavaSEPort.connect(JavaSEPort.java:9850)
	at com.codename1.io.ConnectionRequest.performOperationComplete(ConnectionRequest.java:819)
	at com.codename1.io.NetworkManager$NetworkThread.runCurrentRequest(NetworkManager.java:314)
	at com.codename1.io.NetworkManager$NetworkThread.run(NetworkManager.java:390)
	at com.codename1.impl.CodenameOneThread.run(CodenameOneThread.java:176)

In both cases the error isn't caught by any error handler (onErrorCode*, onError), but they are caught by the listener in the NetworkManager (NetworkManager. getInstance().addErrorListener).

I would like to be able to catch them via the callbaks of the request because in my scenario before making the request I display an infinite progress dialog that I want to be able to remove if an exception occurs which is not possible because the error is sent back to the NetworkManager listener where I do not have access to the infinite progress dialog.