阻止Volley同时发送相同的请求

时间:2016-09-27 10:04:59

标签: java android queue android-volley request-queueing

我正在为Android应用开发一个通用库,我正在使用Volley通过网络发送请求。 来自同一问题的2个问题:用户多次单击PartialAsync并且请求排队了用户单击Button的次数(指向相同的用户XP问题)。< / p>

我希望在客户方面解决两个问题:

如何才能使用Volley以便不对两次相同的请求进行排队?

1 个答案:

答案 0 :(得分:2)

  

如何才能使用Volley以便不对两次相同的请求进行排队?

Volley无法与其RequestQueueadd()cancelAll()finish()除外)进行互动。

您可以使用反射来访问mCurrentRequests字段(并将Request与排队的Request进行比较),我不建议这样做。

您可以将排队的请求添加到WeakHashMap(以Request为键),并使用密钥集检查新请求是否相等(基于您的实现)。

例如:

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;
}