2

我对 AsyncTask.THREAD_POOL_EXECUTOR 有共同的请求和响应。我已经手动实现了重试计数。现在,如果两个 Web 服务同时工作然后它使用彼此的重试计数会发生什么。

我正在使用客户端 OkHttpClient 进行改造。

4

2 回答 2

0

我使用自定义回调(覆盖改造的回调)解决了它。在这个类中通过重试计数。因此,在响应成功或失败时,您将可以访问特定于 Web 服务的可变重试计数。所以在并行执行的情况下不会互相干扰。

@POST("/xyz/abc/")
    void getSomeData(
            @Body TypedInput body,
            Callback<Response> callback);

您可以创建并传递您的自定义回调并保存一些对象/int 值以唯一标识请求。

public interface CustomOnRequestFinishedListener {

    void onSuccess(Object response, Response retrofitResponse, Object data);

    void onError(RetrofitError error, Object data);
}

在您要调用 CustomCallback 的地方实施 CustomOnRequestFinishedListener 并将获得成功/失败回调

public class CustomCallback extends CallBack
    {
    private final Object data;
private final CustomOnRequestFinishedListener customOnRequestFinishedListener;
    public CustomCallback(CustomOnRequestFinishedListener customOnRequestFinishedListener, Object data)
    {
        this.data = data;
this.customOnRequestFinishedListener = customOnRequestFinishedListener;
    }

    @Override
    public void success(Object o, Response response)
    {
        customOnRequestFinishedListener.onSuccess(o, response, data);
    }

    @Override
    public void failure(RetrofitError error)
    {
        customOnRequestFinishedListener.onError(error, data);
    }
    }

通过这种方式,您最初将在请求中设置一些唯一数据,并将获得相同的数据作为响应。

于 2016-08-16T13:11:27.807 回答
0

我建议您切换到rxandroid并利用retry()

于 2016-08-16T12:52:07.270 回答