处理网络断开的最佳方式

时间:2017-12-18 22:18:00

标签: android retrofit2 okhttp android-networking

我是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);,在这部分请求被重新加载,甚至'它再次失败拦截器永远不会在控制台中没有任何错误地重新启动。

第二种方法:

我使用了这个示例:Retrying the request using Retrofit 2来实现一个带有按钮的toast,供用户手动重试失败的请求但在这种情况下我遇到了障碍:如果一个活动有多个请求将显示带有重试按钮的Toast,供用户单独重试每个请求。

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

1 个答案:

答案 0 :(得分:1)

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

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

2)您可以使用RxJava(我使用这种方法),使用这个简单的库,当网络出现时,您可以在observable中获得回调

Github of the library - RxNetwork