我想处理没有互联网连接的情况。通常我会跑:
ConnectivityManager cm =
(ConnectivityManager)context.getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo activeNetwork = cm.getActiveNetworkInfo();
boolean isConnected = activeNetwork != null &&
activeNetwork.isConnectedOrConnecting();
(来自 here )在将请求发送到网络之前,如果没有互联网连接则通知用户。
据我所知,Retrofit 并没有专门处理这种情况。如果没有互联网连接,我只会以超时为原因得到 RetrofitError
。
如果我想通过 Retrofit 将这种检查合并到每个 HTTP 请求中,我应该怎么做?或者我应该这样做。
谢谢
亚历克斯
最佳答案
我最终做的是创建一个自定义 Retrofit 客户端,该客户端在执行请求之前检查连接并引发异常。
public class ConnectivityAwareUrlClient implements Client {
Logger log = LoggerFactory.getLogger(ConnectivityAwareUrlClient.class);
public ConnectivityAwareUrlClient(Client wrappedClient, NetworkConnectivityManager ncm) {
this.wrappedClient = wrappedClient;
this.ncm = ncm;
}
Client wrappedClient;
private NetworkConnectivityManager ncm;
@Override
public Response execute(Request request) throws IOException {
if (!ncm.isConnected()) {
log.debug("No connectivity %s ", request);
throw new NoConnectivityException("No connectivity");
}
return wrappedClient.execute(request);
}
}
然后在配置RestAdapter
RestAdapter.Builder().setEndpoint(serverHost)
.setClient(new ConnectivityAwareUrlClient(new OkHttpClient(), ...))
关于android - 我应该如何在 Android 上使用 Retrofit 处理 "No internet connection",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20786593/