在Retrofit 2

时间:2016-08-03 00:07:27

标签: android retrofit retrofit2 okhttp3

如何通过Retrofit 2检测到没有互联网连接错误?

我以前在Retrofit 1中做的是实现Client接口并在执行时执行连接检查(请求请求)。

我在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我扔进拦截器。

1 个答案:

答案 0 :(得分:2)

找到解决方案。

我的OfflineException课程必须继承IOException