2017-12-18 45 views
2

저는 Android에 익숙하지 않아 사용자가 네트워크에 연결되어 있지 않은 경우 상황을 해결할 수있는 가장 좋은 방법을 찾아 내기 위해 노력하고 있습니다. OkHttp와 함께 Retrofit2를 사용하고 있으며 여러 솔루션을 시도했습니다.네트워크 단절을 처리하는 최적의 방법

첫 번째 방법 :

OkHttp 인터셉터 :

new Interceptor() { 
     @Override 
     public Response intercept(Chain chain) throws IOException { 
      Request request = chain.request(); 

      // try the request 
      Response response = chain.proceed(request); 


      private final SuperActivityToast warningToast = new 
      SuperActivityToast(currentActivity, new Style(), Style.TYPE_BUTTON).setIndeterminate(true); 
      warningToast.setText("Currently offline").show; 

      while (!response.isSuccessful()) { 
       // retry the request 
       response = chain.proceed(request); 
      } 

      // otherwise just pass the original response on 
      return response; 
     } 
    } 

그래서 기본적으로 나는 사용자가 네트워크 연결을 (이것은 기본적인 생각이 때까지 요청, 나는 수표를 구현할 계속 다시 시도 사용자가 네트워크가없는 경우와 문제가 서버에서 발생하는 경우를 구별하기 위해),하지만 그것이 효율적이지 않다는 것을 알고 있습니다. 또한 while 루프는 액세스하지 않습니다 (중단 점을 확인하기 위해 디버깅 모드를 사용했습니다). 코드는 Response response = chain.proceed(request);에서 멈추었습니다.이 부분에서는 요청이 다시로드되고 다시 실패합니다. 즉, 다시 인터셉터가 다시 액세스되지 않습니다. 콘솔의 오류.

두 번째 접근 방식은 수동으로 실패한 요청을 다시 시도하는 사용자에 대한 버튼 축배를 구현하는 Retrying the request using Retrofit 2을하지만,이 상황에서 나는 장벽을 만난 :

나는이 예제를 사용했습니다 을 경우 활동에 여러 요청이있는 경우 재시도 단추가있는 축배가 표시되어 사용자가 각 요청을 개별적으로 다시 시도 할 수 있습니다.

내가 놓친 다른 방법은 없나요? 주요 질문은 다음과 같습니다. 사용자 네트워크 연결 끊김을 확인하고 사용자가 요청을 다시 시도하거나 실패한 요청을 자동으로 다시 시도하도록 허용하는 가장 좋은 방법은 무엇입니까?

+0

, 내 대답을 확인하시기 바랍니다 할 때 당신은 당신이 관찰에 콜백을 얻을이 간단한 라이브러리 RxJava (나는이 방법을 사용), 사용할 수 있습니다 –

답변

1

가를 결정하는 것은 여러분의 몫입니다 더 잘 맞는 두 가지 해결책이있을 수 있습니다 : 당신이 네트워크 연결의 변화를 감지하고 관심있는 모든 조각이나 활동에 브로드 캐스트를 전송하는 방송 수신기를 사용할 수 있습니다

1) 장치가 인터넷에 연결되면 네트워크 호출을 자동으로 수행합니다. detailed tutorial here

2) 네트워크는 당신을 도움이된다면

Github of the library - RxNetwork