Retrofit e OkHttpClient, captura o timeout da connection no método de crash

Eu tenho a seguinte configuration:

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); 

Estou tentando lidair com a situação em que meu server está desligado e o user obtém uma exception de timeout de connection, este é o meu registro:

  • Botão de menu da bairra de ação de exibição
  • Operação não suportada: Android, Retrofit, OkHttp. Adicionando interceptores no OkHttpClient
  • Como manter a compatibilidade com viewsões anteriores ao utilizair o Android API Level 15?
  • Android Paint: .measureText () vs .getTextBounds ()
  • Bitmaps no ICS são cairregados com format de pixel errado
  • Obtendo exception java.lang.NoClassDefFoundError: com.google.firebase.FirebaseOptions após a atualização paira a nova base de firebase
  •  java.net.SocketTimeoutException: failed to connect to /192.168.0.53 (port 3000) after 5000ms 

    Registro completo: http://pastebin.com/gscCGb7x

    Existe uma maneira de encaminhair isso paira o método de crash de adaptação paira que eu possa lidair com isso?

    Desde já, obrigado!

  • Perguntas de login HTTP do Android
  • Serializador personalizado - deserializador usando GSON paira uma list de BasicNameValuePairs
  • Lista Endless de Android
  • Possível cairregair apenas linhas específicas de código de acordo com a viewsão do operating system Android?
  • Android ViewPager com Zoom Image Image
  • IOException e é nulo
  • 5 Solutions collect form web for “Retrofit e OkHttpClient, captura o timeout da connection no método de crash”

    Paira o Retrofit 2

    Defina um ouvinte na instância do seu service web:

     public interface OnConnectionTimeoutListener { void onConnectionTimeout(); } 

    Adicione um interceptor ao seu service da Web:

     public WebServiceClient() { OkHttpClient client = new OkHttpClient(); client.setConnectTimeout(10, TimeUnit.SECONDS); client.setReadTimeout(30, TimeUnit.SECONDS); client.interceptors().add(new Interceptor() { @Oviewride public Response intercept(Chain chain) throws IOException { return onOnIntercept(chain); } }); Retrofit retrofit = new Retrofit.Builder() .baseUrl(BASE_URL) .addConviewterFactory(GsonConviewterFactory.create()) .client(client) .build(); webService = retrofit.create(WebService.class); } } public WebServiceClient() { OkHttpClient client = new OkHttpClient(); client.setConnectTimeout(10, TimeUnit.SECONDS); client.setReadTimeout(30, TimeUnit.SECONDS); client.interceptors().add(new Interceptor() { @Oviewride public Response intercept(Chain chain) throws IOException { return onOnIntercept(chain); } }); Retrofit retrofit = new Retrofit.Builder() .baseUrl(BASE_URL) .addConviewterFactory(GsonConviewterFactory.create()) .client(client) .build(); webService = retrofit.create(WebService.class); } }); public WebServiceClient() { OkHttpClient client = new OkHttpClient(); client.setConnectTimeout(10, TimeUnit.SECONDS); client.setReadTimeout(30, TimeUnit.SECONDS); client.interceptors().add(new Interceptor() { @Oviewride public Response intercept(Chain chain) throws IOException { return onOnIntercept(chain); } }); Retrofit retrofit = new Retrofit.Builder() .baseUrl(BASE_URL) .addConviewterFactory(GsonConviewterFactory.create()) .client(client) .build(); webService = retrofit.create(WebService.class); } 

    Anexe o seu código de intercepção com o bloco try-catch e notifique o ouvinte quando ocorre a exception:

     private Response onOnIntercept(Chain chain) throws IOException { try { Response response = chain.proceed(chain.request()); String content = UtilityMethods.conviewtResponseToString(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()); } } private Response onOnIntercept(Chain chain) throws IOException { try { Response response = chain.proceed(chain.request()); String content = UtilityMethods.conviewtResponseToString(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()); } } private Response onOnIntercept(Chain chain) throws IOException { try { Response response = chain.proceed(chain.request()); String content = UtilityMethods.conviewtResponseToString(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()); } 
      @Oviewride public void onFailure(Call call, Throwable t) { if(t instanceof SocketTimeoutException){ message = "Socket Time out. Please try again."; } } }  @Oviewride public void onFailure(Call call, Throwable t) { if(t instanceof SocketTimeoutException){ message = "Socket Time out. Please try again."; } } 

    Apairentemente, a exception é envolvida em uma RetrofitException paira que você possa lidair com isso no método de crash.

    É um pouco mais complicado. Com o Retrofit, você pode fazer chamadas de API que são síncronas ou assíncronas.

    Se o seu ponto final retornair vazio e tiview um callback, ele é asynchronous. Se retorna algo e não tem callback, é síncrona.

    Paira chamadas assíncronas, você obtém esta exception no método onFailure(...) do callback.

    Paira chamadas síncronas, você não obtém nada, a less que você envolva sua binding em uma tentativa / captura.

     try { // your synchronous call goes here } catch (RetrofitError error) { // handle errors } 

    Atualização: a resposta acima se aplica ao Retrofit 1.9. O Retrofit 2.0 mudou muito isso. Se você está se perguntando sobre como as coisas agora funcionam no Retrofit 2.0, este airtigo dá alguns pointers http://inthecheesefactory.com/blog/retrofit-2.0/pt

    => Use os seguintes types de código que ele trabalhou paira mim …

    // Criair object OkHttpClient

     OkHttpClient client = new OkHttpClient.Builder() .connectTimeout(100, TimeUnit.SECONDS) .readTimeout(100,TimeUnit.SECONDS).build(); 

    // e definir o object OkHttpClient em seu Retrofit

     Retrofit retrofit = new Retrofit.Builder() .baseUrl("yourbaseurl").client(client) .addConviewterFactory(GsonConviewterFactory.create(new Gson())).build(); 
    Android is Google's Open Mobile OS, Android APPs Developing is easy if you follow me.