如何禁用与 OkHttp 的一个连接的重试?

use*_*425 4 android okhttp

我正在使用 OkHttp 并希望禁用特定 api 调用的连接重试。这是正确的方法吗?:

mMyGlobalClient = new OkHttpClient();

....

public void makeConnection(...) {

    OkHttpClient client = null;
    if (disableRetries) {
        OkHttpClient clone = mMyGlobalClient.clone();
        clone.setRetryOnConnectionFailure(false);
        client = clone;
    } else {
        client = mMyGlobalClient;
    }

    client.newCall(...);
}
Run Code Online (Sandbox Code Playgroud)

这个想法来自这篇文章:

https://github.com/square/okhttp/pull/1259#issue-53157152

大多数应用程序不想全局禁用重试。相反,使用 clone() 为特定的非幂等请求获取 OkHttpClient,然后使用设置配置该客户端。

我想为这个调用禁用重试的原因是,如果它被我的服务器处理两次,它可能具有破坏性:

https://github.com/square/okhttp/pull/1259#issuecomment-68430264

谢谢

Vit*_*nko 8

是的,这是正确的方法。

顺便说一句,如果你不介意,你可以写得简单一点

mMyGlobalClient = new OkHttpClient();

....

public void makeConnection(...) {

    OkHttpClient client = null;
    if (disableRetries) {
        client = mMyGlobalClient.clone();
        client.setRetryOnConnectionFailure(false);
    } else {
        client = mMyGlobalClient;
    }

    client.newCall(...);
}
Run Code Online (Sandbox Code Playgroud)