【问题标题】:Detect 'no internet' connectivity error in Retrofit 2在 Retrofit 2 中检测“无互联网”连接错误
【发布时间】:2016-08-03 00:07:27
【问题描述】:

如何使用 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 导致应用程序崩溃。

【问题讨论】:

  • 顺便说一句,您在构建新请求时执行了不必要的对象分配。只需致电chain.proceed(chain.request())
  • @awonderer - 这个方法只是检查网络连接还是也检查互联网连接?

标签: android retrofit retrofit2 okhttp3


【解决方案1】:

找到了解决办法。

我的OfflineException 类必须继承IOException

【讨论】:

    猜你喜欢
    • 2012-01-17
    • 2019-11-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-01-24
    • 1970-01-01
    • 2016-01-24
    相关资源
    最近更新 更多