Предотвращение одновременной отправки одного и того же запроса
Я занимаюсь разработкой универсальной библиотеки для приложений Android и использую Volley для отправки запросов по сети.
2 проблемы, возникшие из-за одной и той же проблемы: пользователь нажимает Button
несколько раз, и запрос ставится в очередь # раз пользователь щелкнул Button
(что указывает на ту же проблему пользователя XP).
Я хотел бы решить проблему по двум вопросам на стороне клиента:
- Пользовательский интерфейс - кнопка общего назначения с порогом таймера при нажатии, поэтому пользователь не может нажать кнопку
Button
слишком много раз. Это и пример реализации: Как избежать одновременного нажатия нескольких кнопок в Android? - Volley как Отдыхающий Клиент должен хранить необходимую информацию для обработки нескольких запросов, поступающих от одной и той же операции.
Как я могу использовать залп, чтобы не ставить в очередь один и тот же запрос дважды?
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;
}