2016-04-16 9 views
1

ネットワークコールのために私のアプリケーションでRetrofit2を使用しています。ネットワーキングコール中にアプリで何らかのエラーが発生した場合、ユーザーにアラートを表示します。 Retrofitのオーバーライドメソッドでネットワーキングコール中にユーザーにアラートを表示することはできますが、ネットワーキングコールごとにメソッドを作成する必要はありません。エラーが発生するたびに、そのアラートメソッドを表示する方法はありますか?Retrofit2で何らかのエラーが発生した場合、ユーザーにアラートを表示しますか?

私にはどんな種類のヘルプが役に立ちます。

+0

私は可能な解決策を追加しました@R ajeev、それを確認してください – Lampard

答えて

0

あなたは

以下
public static class LoggingInterceptor implements Interceptor 
    { 
     Context context; 

     public LoggingInterceptor(Context context) 
     { 
      this.context = context; 
     } 

     @Override 
     public Response intercept(Chain chain) throws IOException 
     { 
      Request request = chain.request(); 
      Response response = chain.proceed(request); 
      response.code(); 
      if(response.code() != 200) 
      { 
       backgroundThreadShortToast(context, "response code is not 200"); 
      } 
      else 
      { 
       backgroundThreadShortToast(context, "response code is 200"); 
      } 
      return response.newBuilder().body(ResponseBody.create(response.body().contentType(), "")).build(); 
      //return response; 
     } 
    } 

public static void backgroundThreadShortToast(final Context context, final String msg) 
    { 
     if(context != null && msg != null) 
     { 
     new Handler(Looper.getMainLooper()).post(new Runnable() 
      { 

       @Override 
       public void run() 
       { 
        Toast.makeText(context, msg, Toast.LENGTH_SHORT).show(); 
       } 
      }); 
     } 
    } 

のようなインターセプタを追加し、上記の場合には、あなたのメインの改造クライアント

client.interceptors().add(new LoggingInterceptor(context)); 

にこのインターセプタを追加する必要があり、トーストは、応答コードのためになります= = 200。

希望します。

あなたは以下のように実行して、ユーザーにトーストを表示することができ、そのONFAILURE方法で
+0

それは動作していない、私は同じを実装しました。 – Rajeev

+0

よく投稿する前にコードをテストしました。何のエラーが出ているのか教えていただけますか? – Morya

0

  @Override 
      public void onFailure(Throwable t) { 
       Toast.makeText(yourContext, t.getLocalizedMessage(), Toast.LENGTH_LONG).show(); 

      } 
     }); 
1

ユーティリティクラスを作成し、このようなネットワーク・エラーのアラートダイアログのメソッドを作成します。

public static void showNetworkDialog(context){ 
     AlertDialog.Builder alertDialogBuilder=new AlertDialog.Builder(context); 

     alertDialogBuilder.setTitle("Network Error"); 

     alertDialogBuilder 
       .setMessage("Check Internet Connection!") 
       .setCancelable(false) 
       .setPositiveButton("OK", new DialogInterface.OnClickListener() { 
        @Override 
        public void onClick(DialogInterface dialog, int which) { 
         dialog.dismiss(); 
        } 
       }); 
     AlertDialog alertDialog = alertDialogBuilder.create(); 

     // show it 
     alertDialog.show(); 
    } 

その後、あなたのWebサービス呼び出し失敗メソッドで上記のメソッドを呼び出します:

@Override 
      public void onFailure(Throwable t) { 
       Utils.showNetworkDialog(context); 

      } 
     });