处理网络断开的最佳方式

Optimal way to handle network disconnection

我是 Android 的新手,我正在尝试找出当用户没有网络连接时处理这种情况的最佳方法。我将 Retrofit2 与 OkHttp 一起使用,并且尝试了多种解决方案。

第一种方法:

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);,在这部分重新加载请求,即使它再次失败,拦截器也永远不会重新访问,控制台中没有任何错误。

第二种方法:

我使用了这个例子: 实现了带有按钮的 toast,用户可以手动重试失败的请求,但在这种情况下我遇到了障碍:如果一个activity 有多个请求,将显示带有重试按钮的 toast 以供用户分别重试每个请求。

还有其他我错过的方法吗?主要问题是:检查用户网络断开并允许用户重试请求或让我们自动重试失败请求的最佳方法是什么?

可以有两种解决方案,哪种更适合您,由您决定:

1) 您可以使用广播接收器来检测网络连接变化,并向所有感兴趣的片段或活动发送广播,以便在设备连接到互联网时自动进行网络调用。 detailed tutorial here

2) 您可以使用 RxJava(我使用这种方法),通过这个简单的库,您可以在网络

时获得可观察的回调

Github of the library - RxNetwork