1

I'm using Volley to consume a Rest Service and I've implemented a timeout of 1500 ms using the setRetryPolicy method

// test [

final long ini = System.currentTimeMillis();

RequestQueue queue = Volley.newRequestQueue(appActivity);

final ApiRequest request = new ApiRequest(url, parameters, ignoreNull,
  new Consumer<String>() {
    @Override
    public void accept(String response) {
      Log.d("test","ok");
    }
  }, 
  new Consumer<Exception>() {
    @Override
    public void accept(Exception exception) {
      exception.printStackTrace();
      Log.d("test","time: " +  (System.currentTimeMillis()-ini) );
    }
  });


RetryPolicy policy = new DefaultRetryPolicy(1500, 1, DefaultRetryPolicy.DEFAULT_BACKOFF_MULT);
request.setRetryPolicy(policy);

queue.add(request);

// test]

When I test the app and the service is started, the app works well, when the service is slow, the app shows the timeout exception after 4500 ms (1500 + 3000) as is expected, but when I stop de the server, the app shows different exceptions after more than 4500 ms

A ConnectException after 14 seconds

com.android.volley.NoConnectionError: java.net.ConnectException: Failed to connect to api.roomnette.com/172.67.155.71:443
    at com.android.volley.toolbox.BasicNetwork.performRequest(BasicNetwork.java:181)
    at com.android.volley.NetworkDispatcher.processRequest(NetworkDispatcher.java:131)
    at com.android.volley.NetworkDispatcher.processRequest(NetworkDispatcher.java:111)
    at com.android.volley.NetworkDispatcher.run(NetworkDispatcher.java:90)
Caused by: java.net.ConnectException: Failed to connect to api.roomnette.com/172.67.155.71:443
    at com.android.okhttp.internal.io.RealConnection.connectSocket(RealConnection.java:143)
    at com.android.okhttp.internal.io.RealConnection.connect(RealConnection.java:112)
    at com.android.okhttp.internal.http.StreamAllocation.findConnection(StreamAllocation.java:184)
    at com.android.okhttp.internal.http.StreamAllocation.findHealthyConnection(StreamAllocation.java:126)
    at com.android.okhttp.internal.http.StreamAllocation.newStream(StreamAllocation.java:95)
    at com.android.okhttp.internal.http.HttpEngine.connect(HttpEngine.java:281)
    at com.android.okhttp.internal.http.HttpEngine.sendRequest(HttpEngine.java:224)
    at com.android.okhttp.internal.huc.HttpURLConnectionImpl.execute(HttpURLConnectionImpl.java:461)
    at com.android.okhttp.internal.huc.HttpURLConnectionImpl.connect(HttpURLConnectionImpl.java:127)
    at com.android.okhttp.internal.huc.HttpURLConnectionImpl.getOutputStream(HttpURLConnectionImpl.java:258)
    at com.android.okhttp.internal.huc.DelegatingHttpsURLConnection.getOutputStream(DelegatingHttpsURLConnection.java:218)
    at com.android.okhttp.internal.huc.HttpsURLConnectionImpl.getOutputStream(Unknown Source:0)
    at com.android.volley.toolbox.HurlStack.addBody(HurlStack.java:292)
    at com.android.volley.toolbox.HurlStack.addBodyIfExists(HurlStack.java:277)
    at com.android.volley.toolbox.HurlStack.setConnectionParametersForRequest(HurlStack.java:249)
    at com.android.volley.toolbox.HurlStack.executeRequest(HurlStack.java:94)
    at com.android.volley.toolbox.BasicNetwork.performRequest(BasicNetwork.java:123)
    ... 3 more
2020-06-25 22:03:41.854 5132-5132/com.roomnette D/test: time: 14784

A UnknownHostException after 23 seconds

com.android.volley.NoConnectionError: java.net.UnknownHostException: Unable to resolve host "api.roomnette.com": No address associated with hostname
    at com.android.volley.toolbox.BasicNetwork.performRequest(BasicNetwork.java:181)
    at com.android.volley.NetworkDispatcher.processRequest(NetworkDispatcher.java:131)
    at com.android.volley.NetworkDispatcher.processRequest(NetworkDispatcher.java:111)
    at com.android.volley.NetworkDispatcher.run(NetworkDispatcher.java:90)
Caused by: java.net.UnknownHostException: Unable to resolve host "api.roomnette.com": No address associated with hostname
    at java.net.InetAddress.lookupHostByName(InetAddress.java:440)
    at java.net.InetAddress.getAllByNameImpl(InetAddress.java:252)
    at java.net.InetAddress.getAllByName(InetAddress.java:215)
    at com.android.okhttp.internal.Network$1.resolveInetAddresses(Network.java:29)
    at com.android.okhttp.internal.http.RouteSelector.resetNextInetSocketAddress(RouteSelector.java:188)
    at com.android.okhttp.internal.http.RouteSelector.nextProxy(RouteSelector.java:157)
    at com.android.okhttp.internal.http.RouteSelector.next(RouteSelector.java:100)
    at com.android.okhttp.internal.http.HttpEngine.createNextConnection(HttpEngine.java:358)
    at com.android.okhttp.internal.http.HttpEngine.nextConnection(HttpEngine.java:341)
    at com.android.okhttp.internal.http.HttpEngine.connect(HttpEngine.java:331)
    at com.android.okhttp.internal.http.HttpEngine.sendRequest(HttpEngine.java:249)
    at com.android.okhttp.internal.huc.HttpURLConnectionImpl.execute(HttpURLConnectionImpl.java:437)
    at com.android.okhttp.internal.huc.HttpURLConnectionImpl.connect(HttpURLConnectionImpl.java:114)
    at com.android.okhttp.internal.huc.HttpURLConnectionImpl.getOutputStream(HttpURLConnectionImpl.java:245)
    at com.android.okhttp.internal.huc.DelegatingHttpsURLConnection.getOutputStream(DelegatingHttpsURLConnection.java:218)
    at com.android.okhttp.internal.huc.HttpsURLConnectionImpl.getOutputStream(HttpsURLConnectionImpl.java:25)
    at com.android.volley.toolbox.HurlStack.addBody(HurlStack.java:292)
    at com.android.volley.toolbox.HurlStack.addBodyIfExists(HurlStack.java:277)
    at com.android.volley.toolbox.HurlStack.setConnectionParametersForRequest(HurlStack.java:249)
    at com.android.volley.toolbox.HurlStack.executeRequest(HurlStack.java:94)
    at com.android.volley.toolbox.BasicNetwork.performRequest(BasicNetwork.java:123)
    ... 3 more
2020-06-25 22:14:25.365 5132-5132/com.roomnette D/test: time: 23842

Obviously it results UnknownHostException/ConnectException when I stop the server but, why does the application take more than 10 seconds to throw the exception? Is there a way to set a timeout to try to resolve the host or to establish the connection?

imperezivan
  • 761
  • 5
  • 13

2 Answers2

1

The response is a expected one.. It results Unknown host exception when you stop the server

Sanjay S
  • 59
  • 1
  • 5
  • but, why does the application take more than 10 seconds to throw the exception? Is there a way to set a timeout to try to resolve the host or to establish the connection? – imperezivan Jun 26 '20 at 05:13
1

I had the same problem and solved it by adding a delayed task to stop the queue:

RetryPolicy policy = new DefaultRetryPolicy(1500, 1, DefaultRetryPolicy.DEFAULT_BACKOFF_MULT);
request.setRetryPolicy(policy);


// solution [
int maxTimeOut = 15000;

new Handler().postDelayed(new Runnable() {
    @Override
    public void run() {
        queue.stop();
    }
}, maxTimeOut);
// solution]

queue.add(stringRequest);
Adrian Mole
  • 49,934
  • 160
  • 51
  • 83
Javier B.
  • 26
  • 2