在 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 而崩溃。

找到解决方案。

我的OfflineExceptionclass必须继承IOException