我是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)您可以使用广播接收器检测网络连接变化,并在设备上网时自动向所有感兴趣的片段或活动发送广播以进行网络呼叫。 detailed tutorial here
2)你可以使用RxJava(我使用这种方法),使用这个简单的库,你可以在网络被观察时获得回调