2016-04-08 38 views
1

Ben aşağıdaki kodu kullanarak bir Web sunucusuna bir HTTP GET isteği yapıyorum: istek nedeniyle iptal edilmesi infaz edilemedi eğer IOException atacağım çağrıları yürütmek okhttp3, aşağıda gösterildiği gibi OkHttp document göreOkHttp3 isteği zaman aşımına uğradı mı kontrol edilir?

private final OkHttpClient client = new OkHttpClient(); 

public void run() throws Exception { 
    Request request = new Request.Builder() 
     .url("http://publicobject.com/helloworld.txt") 
     .build(); 

    Response response = client.newCall(request).execute(); 
    if (!response.isSuccessful()) throw new IOException("Unexpected code " + response); 

    Headers responseHeaders = response.headers(); 
    for (int i = 0; i < responseHeaders.size(); i++) { 
    System.out.println(responseHeaders.name(i) + ": " + responseHeaders.value(i)); 
    } 

    System.out.println(response.body().string()); 
} 

, bir bağlantı sorunu veya zaman aşımı.

Atmalar: IOException - İstek, iptali, bir bağlantı sorunu ya da zaman aşımı için idam edilemedi eğer. Ağlar bir değişim sırasında başarısız olabileceğinden, uzak sunucunun başarısızlıktan önce isteği kabul etmesi mümkündür.

IOException isteğinin zaman aşımına uğraması nedeniyle olup olmadığını öğrenmenin bir yolu olup olmadığını bilmek ister misiniz?

cevap

0

OkHttp3 belgelerinde zaman aşımı istisnasıyla ilgili herhangi bir bilgi bulamadığım halde, here testlerine bakarak, zaman aşımları durumunda SocketTimeoutException istisnasının ortaya çıkacağını gösterir.

try { 
    // make http request 
} catch (SocketTimeoutException e) { 
    // request timed out 
} catch (IOException e) { 
    // some other error 
} 
: IOException aşağıda gibi aşımına almak isteğine bağlı olsaydı

Yani, benim kendi soruyu cevaplamak için, bildiğimiz üzere ilk SocketTimeoutException yakalayabilirsiniz