2016-09-02 1 views
3

Retrofit 2.0.1을 사용하고 있습니다. 모든 유형의 네트워크 오류 및 예외 (예 : 네트워크 연결, 시간 초과 오류, 서버를 찾을 수 없음 등)를 처리하고 싶습니다.이 메시지는 link입니다. 그러나 일부 메소드는 v1.8.0에서 사용되지 않습니다. 2.0.1에서 어떻게 할 수 있습니까?개조 중 여러 유형의 예외 및 오류를 처리하는 방법 2.0.1

답변

1

어쨌든 연결 상태를 확인해야하며 RetroFit과 아무 관련이 없습니다. ConnectivityManager을 찾아보십시오.

(A quicky 솔루션이, 여러분의 필요에 수정 같은 입니다) :

public boolean isConnected() 
{ 
    ConnectivityManager manager = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE); 
    NetworkInfo info = manager.getActiveNetworkInfo(); 

    return (info != null && info.isConnected()); 
} 

편집 : 는 이것을 고려 - ConnectivityManager하자 당신은 당신이 보내는 데이터 인터페이스를 알고, 실제로 외부 링크가 있는지 알고 싶다면 ping이 좋다면 TimeoutsserverNotFound에 대해 서버 (또는 응답하는 다른 알려진 domian)에 ping 할 것을 제안합니다. http 돌아 오는 코드 api 요청에 대한 onFailure(). 404, 400, 200 등). 핑은 서버가 존재하고 살아 핑 작동 그래서 시나리오 알고 있지만 Bad Request를 반환합니다 HTTP 요청은 매우 가능하다하자 단 하나의 UDP 패킷 왜

제 1, 쉽게 처리 할 수 ​​있지만 논리는 당신에게 달려 있습니다.

다른 것들을 위해서 - 당신이 원하는 핸들링을 구현하는 데 필요한 모든 정보는 콜백에서 찾을 수 있습니다.

이 예제는 머리글에서 배달 정보를 얻을 수 ResponseBody 사용

@Override 
public void onResponse(Call<ResponseBody> call, retrofit2.Response<ResponseBody> rawResponse) 
{ 
    try 
    { 
    String response = rawResponse.headers().toString(); 
    //now print this... 
    } 
    catch(Exception e) 
    { 
    e.printStackTrace(); 
    } 
} 

시간 제한 및 serverNotFound은 onFailure 콜백을 통해 handeled 할 수

(이 골격, 당신은 그 안에 필요한 읽기, 실행이다) 그것에 대해 최대 : 당신이 싸다을 centeralize 오류 처리기가 필요한 경우

@Override 
public void onFailure(Call<ResponseBody> call, Throwable throwable) 
{ 
//use throwable.get.... to know what happened 
throwable.printStackTrace(); 
} 

희망이 어떤 식 으로든

+0

감사 답장을, ConnectivityManager은 와이파이 활성화 여부 및 데이터를 사용하거나 사용하지,이를 확인한 후 데이터 만이 API를 명중 확인 이 경우 OnFailure 블록으로 이동합니다.이 경우 나는 connectin 오류 및 서버 오류 처리하고 싶습니다.이 처리하는 방법은 무엇입니까? 모든 오류를 표시하고 메시지를 통해 사용자에게 문제를 표시하고 싶습니다. – Suman

+0

이 답변을 편집 했으므로 계속 살펴보고 응답을 직접 이해하고 파악해야합니다. – TommySM

5

에 도움 그냥 간단한 오류 처리기가 필요한 경우 확인 this 스레드에서 그러나 당신이 할 수 있습니다

@Override 
public void onFailure(Throwable throwable) { 
    if (throwable instanceof HttpException) { 
     // We had non-2XX http error 
    } 
    if (throwable instanceof IOException) { 
     // A network or conversion error happened 
    } 

    // We don't know what happened. We need to simply convert to an unknown error 
    // ... 
    } 
+0

답장을 보내 주셔서 감사합니다 @ 에이미, 나는 당신이 링크를 참조하십시오. 그러나 네트 연결 문제가 발생하면 onFailure에 입력하고 UnKnownHostException을 반환합니다. 나는 메시지를 통해 사용자에게 정확한 이슈의 이유를 원한다. 이것으로 해결할 수 있는가? – Suman

+0

처리 할 오류의 종류에 따라 다릅니다. 예를 들어 위 코드에서 어떤 유형의 네트워크 연결 끊김 (Wifi | 모바일)을 감지하거나 HttpException을 구문 분석하여 500400401404, ... – Amir

+0

안녕하세요 Amir, 테스트 케이스를 제공하고 싶습니다. 내 네트워크를 사용 중지하고 실패 블록을 입력하고 UnknownHostException에게 HttpException이 아닌 API를 제공합니다.그래서, 그 시간에 어떤 코드도 반환하지 않습니다. 어떻게 처리할까요? – Suman

관련 문제