在Retrofit2中出现任何类型的错误时向用户显示警报?

时间:2016-04-16 12:28:30

标签: android alert retrofit2

我在我的应用程序中使用Retrofit2进行网络呼叫,我想在网络呼叫期间在我的应用程序中出现任何类型的错误时向用户显示警报。我可以在Retrofit的覆盖方法的网络调用期间向用户显示警报,但我不想为每个网络调用编写方法,是否有任何方法只在出现任何错误时显示该警报方法一次。

任何形式的帮助对我都有帮助。

3 个答案:

答案 0 :(得分: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();
    }

然后在你的webservice调用失败方法中调用上面的方法:

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

            }
        });

答案 1 :(得分: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));

在上述情况下,toast将用于响应代码== 200。

希望它有所帮助。

答案 2 :(得分:0)

在onFailure方法中,您可以通过执行以下操作向用户显示Toast:

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

            }
        });