2016-09-27 5 views
0

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

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

  • UI - кнопка общего назначения, которая имеет пороговое значение таймера на щелчок, так пользователь не может нажать на Button слишком много раз , Это и пример реализации: How to avoid multiple button click at same time in android?
  • Волейбол как клиент для отдыха Клиент должен хранить необходимую информацию, чтобы иметь дело с несколькими запросами, которые поступают из одной и той же операции.

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

ответ

1

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

Залп не имеет методов, чтобы взаимодействовать с его 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; 
}