Предотвращение одновременной отправки одного и того же запроса

Я занимаюсь разработкой универсальной библиотеки для приложений Android и использую Volley для отправки запросов по сети. 2 проблемы, возникшие из-за одной и той же проблемы: пользователь нажимает Button несколько раз, и запрос ставится в очередь # раз пользователь щелкнул Button (что указывает на ту же проблему пользователя XP).

Я хотел бы решить проблему по двум вопросам на стороне клиента:

  • Пользовательский интерфейс - кнопка общего назначения с порогом таймера при нажатии, поэтому пользователь не может нажать кнопку Button слишком много раз. Это и пример реализации: Как избежать одновременного нажатия нескольких кнопок в Android?
  • Volley как Отдыхающий Клиент должен хранить необходимую информацию для обработки нескольких запросов, поступающих от одной и той же операции.

Как я могу использовать залп, чтобы не ставить в очередь один и тот же запрос дважды?

1 ответ

Решение

Как я могу использовать залп, чтобы не ставить в очередь один и тот же запрос дважды?

Залп не имеет способов взаимодействовать с его RequestQueue (Кроме как add(), cancelAll() а также finish()).

Вы можете использовать отражение для доступа к mCurrentRequests поле (и сравните ваши Request с в очереди Requestс), что я не рекомендую.

Вы можете просто добавить свои запросы в очередь к 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;
}
Другие вопросы по тегам