0

私は Android アプリ用の汎用ライブラリを開発しており、Volley を使用してネットワーク経由でリクエストを送信しています。同じ問題から発生した 2 つの問題: ユーザーが をButton数回クリックすると、ユーザーが をクリックした回数だけリクエストがキューに入れられますButton(これは、同じユーザー XP の問題を示しています)。

クライアント側の 2 つの問題に取り組みたいと思います。

  • UI - クリック時にタイマーのしきい値がある汎用ボタン。ユーザーがButton何度もクリックできないようにします。これは実装の例です: Androidで複数のボタンを同時にクリックしないようにする方法は?
  • 残りのクライアントとしての Volley は、同じ操作からの複数の要求を処理するために必要な情報を保持する必要があります。

同じリクエストを 2 回キューに入れないようにするために Volley を使用するにはどうすればよいですか?

4

1 に答える 1

3

同じリクエストを 2 回キューに入れないようにするために Volley を使用するにはどうすればよいですか?

RequestQueueVolley には、 ( と 以外add()に)cancelAll()と対話するメソッドがありませんfinish()

リフレクションを使用してフィールドにアクセスする(そしてキューに入れられたsmCurrentRequestsと比較する) ことができますが、これはお勧めしません。RequestRequest

キューに入れられたリクエストをWeakHashMapRequestキーとして)に追加し、キーセットを使用して(実装に基づいて)新しいリクエストが等しいかどうかを確認するだけです。

例えば:

RequestQueue requestQueue;
WeakHashMap<StringRequest, String> queuedRequests;

// ...

private boolean addRequestToQueue(StringRequest request, String tag) {
    for(StringRequest queuedRequest : queuedRequests.keySet()) {
        if(tag.equals(queuedRequest.getTag())) {
            return false;
        }
    }

    request.setTag(tag);
    requestQueue.add(request);
    queuedRequests.put(request, tag);

    return true;
}
于 2016-09-27T10:49:44.313 に答える