android - 我应该如何在 Android 上使用 Retrofit 处理 "No internet connection"

标签 android retrofit

我想处理没有互联网连接的情况。通常我会跑:

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/

相关文章:

android - 有没有办法在我的 Android 应用程序中以编程方式设置代理服务器?

Android:使用媒体文件进行 GridView 教程会导致 9 张图片后内存不足?

android - 什么时候应该使用 RxJava Observable,什么时候应该在 Android 上使用简单的 Callback?

java - 如何在电影数据库应用程序的 RecyclerView 中实现 getItemViewType() 多种布局

java - RxJava - 在第一个是有条件的情况下进行两次调用

android - ArrayList<HashMap<String, String>> android 取变量

android - 9 补丁背景渲染与 Artifact 和裁剪

javascript - 存储绘图的 Canvas 坐标

android - 如何使用 Kotlin 协程获取 API 错误主体

android - Retrofit 2.0 转换器返回 NULL