Я использую Retrofit2 в своем приложении для сетевых вызовов, и я хочу отображать предупреждение для пользователя при возникновении какой-либо ошибки в моем приложении во время сетевых вызовов. Я могу показывать предупреждение пользователю во время сетевого вызова в методе переопределения Retrofit, но я не хочу писать метод для каждого сетевого вызова. Есть ли способ написать только один раз этот метод предупреждения, когда отображается всякий раз, когда возникает какая-либо ошибка.

Любая помощь была бы мне полезна.

1
Rajeev 16 Апр 2016 в 15:28

3 ответа

Лучший ответ

Вам нужно добавить перехватчик, как показано ниже

 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.

Надеюсь, это поможет.

0
Morya 16 Апр 2016 в 13:37

В его методе onFailure вы можете показать тост пользователю, выполнив следующие действия:

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

            }
        });
0
Dhruvi 16 Апр 2016 в 14:29

Создайте служебный класс и создайте метод для диалогового окна предупреждения о сетевой ошибке, например:

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

Затем в методе сбоя вызова веб-службы просто вызовите указанный выше метод:

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

            }
        });
0
Lampard 10 Май 2016 в 10:20