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

Preventing the same request from being sent simultaneously by Volley

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

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

如何使用 Volley 才能避免对同一请求排队两次?

How can I use Volley in order to not queue the same request twice?

Volley 没有与其 RequestQueue 交互的方法(add()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;
}