【发布时间】: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