2014-05-10 50 views
6

Tôi đang sử dụng trang bị thêm để lấy và đăng dữ liệu từ máy chủ. Tuy nhiên, nếu điện thoại của tôi mất kết nối internet ở giữa ứng dụng thì tôi thấy lỗi như sau:Làm thế nào để xử lý java.net.UnknownHostException trong khi sử dụng trang bị thêm

05-10 08:12:05.559 29369-29400/? D/Retrofit﹕ java.net.UnknownHostException: Unable to resolve host "my.server.com": No address associated with hostname 
      at java.net.InetAddress.lookupHostByName(InetAddress.java:394) 
      at java.net.InetAddress.getAllByNameImpl(InetAddress.java:236) 
      at java.net.InetAddress.getAllByName(InetAddress.java:214) 

Tôi muốn xử lý lỗi này một cách duyên dáng. Tôi muốn bắt ngoại lệ và hiển thị thông báo chúc mừng như "Không có kết nối internet".

Tôi đang cố gắng mã như thế này nhưng tôi nhận được một lỗi rằng: java.net.UnknownHostException is never thrown in the try block

try { 
     isTokenValid = MyManager.INSTANCE.getService().validate(); 
    } 
    catch (RetrofitError cause) { 
     Response r = cause.getResponse(); 

     if (r != null && r.getStatus() == 403) { 
      isTokenValid = false; 
     } 
    } 
    catch (UnknownHostException exception) { 
     Toast.makeText(getBaseContext(), "No internet connection", Toast.LENGTH_SHORT).show(); 
    } 

Trả lời

5

Tôi nghĩ rằng bạn cần phải có một ngoại lệ retrofit trong việc nắm bắt.

catch(RetrofitError error){ 
methodToDeterminErrorType(error); 
} 

RetroFitError là ngoại lệ thời gian chạy chung. Một khi nó chạm vào khối catch bạn thực sự có thể xác minh loại lỗi thực sự được ném bằng cách trang bị thêm. Retrofit có một phương thức isNetworkError() đó là những gì bạn có thể đang tìm kiếm. Vì vậy, về cơ bản bạn có thể làm một việc như sau:

methodToDeterminErrorType(RetroFitError error){ 
    if(error.isNetworkType()){ 
    //throw a toast 
     } 
    } 

Hy vọng điều này sẽ hữu ích.

+0

Ngay bây giờ, error.isNetworkType() không còn được dùng nữa. Chỉ cần sử dụng error.getKind() == Kind.NETWORK – pgarriga

Các vấn đề liên quan