在 Retrofit 2 中检测到 'no internet' 连接错误
Detect 'no internet' connectivity error in Retrofit 2
如何使用 Retrofit 2 检测到无互联网连接错误?
我之前在Retrofit 1中做的就是实现Client接口,在execute(Request request)时进行连通性检查
我在 Retrofit 2 中尝试的是:
public class RequestInterceptor implements Interceptor {
final ConnectivityManager connectivityManager;
@Inject
public RequestInterceptor(ConnectivityManager connectivityManager) {
this.connectivityManager = connectivityManager;
}
@Override
public Response intercept(Chain chain) throws IOException {
if (isConnected()) {
throw new OfflineException("no internet");
}
Request.Builder r = chain.request().newBuilder();
return chain.proceed(r.build());
}
protected boolean isConnected() {
NetworkInfo networkInfo = connectivityManager.getActiveNetworkInfo();
return networkInfo != null && networkInfo.isConnectedOrConnecting();
}
}
我可以通过添加 try-catch 块通过同步 Retrofit 执行来捕获它,但不能通过异步执行来捕获它,其中错误作为 OnFailure(Call call, Throwable t) 的参数返回。应用程序因我在拦截器中抛出的 OfflineException 而崩溃。
找到解决方案。
我的OfflineException
class必须继承IOException
如何使用 Retrofit 2 检测到无互联网连接错误?
我之前在Retrofit 1中做的就是实现Client接口,在execute(Request request)时进行连通性检查
我在 Retrofit 2 中尝试的是:
public class RequestInterceptor implements Interceptor {
final ConnectivityManager connectivityManager;
@Inject
public RequestInterceptor(ConnectivityManager connectivityManager) {
this.connectivityManager = connectivityManager;
}
@Override
public Response intercept(Chain chain) throws IOException {
if (isConnected()) {
throw new OfflineException("no internet");
}
Request.Builder r = chain.request().newBuilder();
return chain.proceed(r.build());
}
protected boolean isConnected() {
NetworkInfo networkInfo = connectivityManager.getActiveNetworkInfo();
return networkInfo != null && networkInfo.isConnectedOrConnecting();
}
}
我可以通过添加 try-catch 块通过同步 Retrofit 执行来捕获它,但不能通过异步执行来捕获它,其中错误作为 OnFailure(Call call, Throwable t) 的参数返回。应用程序因我在拦截器中抛出的 OfflineException 而崩溃。
找到解决方案。
我的OfflineException
class必须继承IOException