6

最近OkHttp3にアップグレードしたところ、クライアントから直接タグによる呼び出しをキャンセルできなくなっていることに気付きました。これは、アプリケーションで処理する必要があります。

ここのCHANGELOGに記載されています:

呼び出しのバッチをキャンセルすることは、アプリケーションの責任になりました。 タグによる呼び出しをキャンセルする API は削除され、より一般的なメカニズムに置き換えられました。ディスパッチャーは、runningCalls() および queuedCalls() メソッドを介してすべての進行中の呼び出しを公開するようになりました。タグ、ホストなどによって呼び出しを選択し、不要になった呼び出しに対して Call.cancel() を呼び出すコードを作成できます。

実行中またはキューに入れられた Call をタグでキャンセルする簡単なユーティリティ メソッドを使用して、この投稿に自己回答しています。

4

1 に答える 1

11

次のユーティリティ クラスを使用して、実行中またはキューに入れられCallたタグをキャンセルします。

public class OkHttpUtils {
    public static void cancelCallWithTag(OkHttpClient client, String tag) {
        // A call may transition from queue -> running. Remove queued Calls first.
        for(Call call : client.dispatcher().queuedCalls()) {
            if(call.request().tag().equals(tag))
                call.cancel();
        }            
        for(Call call : client.dispatcher().runningCalls()) {
            if(call.request().tag().equals(tag))
                call.cancel();
        }
    }
}

ここにテストケースを含む例を作成しました: https://gist.github.com/RyanRamchandar/64c5863838940ec67f03

于 2016-03-12T23:39:43.537 に答える