2017-12-18 42 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);で停止します。この部分でリクエストがリロードされ、さらには失敗します。インターセプタは何もせずに再アクセスされませんコンソールのエラー。

第2のアプローチは:手動で失敗した要求を再試行するユーザーのためのボタンでトーストを実装するためにRetrying the request using Retrofit 2をしかし、このような状況で私が障壁に会った:

私はこの例を使用しているをした場合アクティビティに複数のリクエストがある場合は、ユーザーが各リクエストを別々に再試行するための再試行ボタン付きトーストが表示されます。

他の方法はありませんか?主な質問は次のとおりです。ユーザーネットワークの切断を確認し、ユーザーがリクエストを再試行できるか、または失敗したリクエストを自動的に再試行するのに最適な方法は何ですか?

+0

なるとき、この単純なライブラリを使用すると、観測可能でコールバックを取得し、RxJavaを(私はこのアプローチを使用)を使用することができ、それはあなたを助けている場合、私の答えを確認してください –

答えて

1

それは決定するあなた次第ですより良いあなたに合った2つのソリューション、が存在することができます:あなたは、ネットワーク接続の変更を検出し、すべての利害の断片や活動へのブロードキャストを送信するブロードキャストレシーバーを使用することができます

1)デバイスがインターネットに接続すると自動的にネットワークコールを行う。 detailed tutorial here

2)あなたは、ネットワークが

Github of the library - RxNetwork

関連する問題