I have the following setup:
final OkHttpClient okHttpClient = new OkHttpClient(); okHttpClient.setReadTimeout(5, TimeUnit.SECONDS); okHttpClient.setConnectTimeout(5, TimeUnit.SECONDS); RestAdapter.Builder builder = new RestAdapter.Builder() .setEndpoint(ROOT) .setClient(new OkClient(okHttpClient)) .setLogLevel(RestAdapter.LogLevel.FULL);
I am trying to handle the situation in which my server is down and the user gets a connection timeout exception, this is my logging:
java.net.SocketTimeoutException: failed to connect to /192.168.0.53 (port 3000) after 5000ms
Full logging: http://pastebin.com/gscCGb7x
Is there a way to route this into the retrofit failure method so I can handle it over there?
Thanks in advance!
For Retrofit 2
Define a listener in your web service instance:
public interface OnConnectionTimeoutListener { void onConnectionTimeout(); }
Add an interceptor to your web service:
public WebServiceClient() { OkHttpClient client = new OkHttpClient(); client.setConnectTimeout(10, TimeUnit.SECONDS); client.setReadTimeout(30, TimeUnit.SECONDS); client.interceptors().add(new Interceptor() { @Override public Response intercept(Chain chain) throws IOException { return onOnIntercept(chain); } }); Retrofit retrofit = new Retrofit.Builder() .baseUrl(BASE_URL) .addConverterFactory(GsonConverterFactory.create()) .client(client) .build(); webService = retrofit.create(WebService.class); }
Enclose your intercep code with try-catch block and notify listener when exception happens:
private Response onOnIntercept(Chain chain) throws IOException { try { Response response = chain.proceed(chain.request()); String content = UtilityMethods.convertResponseToString(response); Log.d(TAG, lastCalledMethodName + " - " + content); return response.newBuilder().body(ResponseBody.create(response.body().contentType(), content)).build(); } catch (SocketTimeoutException exception) { exception.printStackTrace(); if(listener != null) listener.onConnectionTimeout(); } return chain.proceed(chain.request()); }
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With