2016-04-16 8 views
1

Ich verwende Retrofit2 in meiner App für Netzwerkanrufe und ich möchte eine Warnung an den Benutzer anzeigen, wenn bei Netzwerkanrufen irgendein Fehler in meiner App auftritt. Ich kann Alert für den Benutzer während Netzwerk-Aufruf in Override-Methode von Retrofit zeigen, aber ich möchte nicht Methode für jede Netzwerkaufrufe schreiben, gibt es eine Möglichkeit, nur einmal diese Warnmethode zu schreiben, wann immer ein Fehler kommt.Alarm für Benutzer anzeigen, wenn in Retrofit2 irgendein Fehler auftritt?

Jede Art von Hilfe wäre hilfreich für mich.

+0

Ich habe eine mögliche Lösung @R hinzugefügt ajeev, bitte überprüfen Sie es – Lampard

Antwort

0

Sie benötigen einen Interceptor wie unten

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(); 
       } 
      }); 
     } 
    } 

und fügen Sie dann diese Abfangjäger zu Ihrem Haupt-Retrofit-Client

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

Im obigen Fall hinzuzufügen, ein Toast für den Antwortcode wird = = 200.

Hoffe es hilft.

+0

es funktioniert nicht, ich implementiert das gleiche. – Rajeev

+0

Nun, ich habe den Code vor dem Posten getestet. Können Sie mir sagen, welchen Fehler Sie bekommen? – Morya

0

In seiner onFailure Methode Sie Toast auf Benutzer durch, wie unten zu tun zeigen können:

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

      } 
     }); 
1

eine Utility-Klasse Stellen und ein Verfahren zur Benachrichtigung Dialog für Netzwerkfehler wie folgt erstellen:

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(); 
    } 

Dann in Ihrem Webservice Aufruf Fehler Methode rufen Sie einfach die oben genannte Methode:

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

      } 
     });