2

私は AsyncTask.THREAD_POOL_EXECUTOR で共通のリクエストとレスポンスを持っています。再試行回数を手動で実装しました。2 つの Web サービスが同時に動作し、互いの再試行回数を使用するとどうなるでしょうか。

クライアント OkHttpClient でレトロフィットを使用しています。

4

2 に答える 2

0

rxandroidに切り替えてretry()を利用することをお勧めします

于 2016-08-16T12:52:07.270 に答える
0

カスタムコールバックを使用して解決しました(レトロフィットのコールバックをオーバーライドします)。このクラスでは、再試行回数を渡します。そのため、応答の成功または失敗時に、Web サービス固有の変数の再試行回数にアクセスできます。そのため、並列実行の場合に互いに干渉しません。

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

カスタム コールバックを作成して渡し、いくつかの object/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 に答える