Работа с intentservice для получения данных из 7 ссылок Rss Feed с использованием «Google Volley» в фоновом режиме и использования ResultReceiver для получения результата. Но я не могу настроить, как ждать ответа волейбола, чтобы закончить работу флаг с ResultReceiver для отображения данных в MainActivityкак ждать ответа залпа, чтобы закончить работу внутри intenservice?
ответ
Вы не должны ждать его. У вас есть два способа сделать сетевой запрос: синхронный и асинхронный. Если вы используете синхронный режим, вы не ждете результата, потому что сетевой вызов является блокировкой.
Смотрите, если вы хотите идти в этом направлении: Can I do a synchronous request with volley?
Если вы хотите сделать это асинхронно, вы просто запустите запрос, а затем использовать ваш ResultReceiver
в методе обратного вызова в Response.Listener
когда запрос закончен.
см это для деталей: https://guides.codepath.com/android/Networking-with-the-Volley-Library
Если вы все еще думаете, что вы должны блокировать текущий поток и ждать результата, вы должны использовать CountDownLatch
. Создайте фоновый поток (вы не можете блокировать поток пользовательского интерфейса в android, если это не отдельный процесс), запустите свою защелку со счетчиком 1 и вызовите метод await()
. Это заблокирует ваш фоновый поток до тех пор, пока счет будет равен 0. После завершения фоновой задачи вы вызываете countDown()
, который разблокирует фоновый поток, и вы сможете выполнить свое действие.
На этот вопрос был дан ответ в official Volley Google Group.
Wrap запрос в RequestFuture сделать блокирующий вызов с помощью RequestFuture#newFuture(...);
Вы можете найти пример кода в Volley source code:
RequestFuture<SONObject> future = RequestFuture.newFuture();
MyRequest request = new MyRequest(URL, future, future);
// If you want to be able to cancel the request:
future.setRequest(requestQueue.add(request));
// Otherwise:
requestQueue.add(request);
try {
JSONObject response = future.get();
// do something with response
} catch (InterruptedException e) {
// handle the error
} catch (ExecutionException e) {
// handle the error
}
Обязательно используйте тайм-аут в future.get(...)
или иначе ваша нить замок.
- 1. JQuery ждать $ .each, чтобы закончить
- 2. Postgres ждать сделки, чтобы закончить
- 3. WebDriver ждать JQuery, чтобы закончить
- 4. sp_start_job ждать работы, чтобы закончить
- 5. Как ждать процесс, чтобы закончить C++
- 6. Как ждать синтеза речи, чтобы закончить
- 7. Как ждать DBMS_SCHEDULER рабочих мест, чтобы закончить
- 8. Как ждать асинхронных закончить
- 9. Как подождать несколько асинтез, чтобы закончить работу?
- 10. Java: ждать весь процесс ребенка, чтобы закончить
- 11. питона paramiko ждать, чтобы закончить команду выполнить
- 12. сделать Jquery ждать функции, чтобы закончить
- 13. с # MySQL ждать предыдущего запроса, чтобы закончить
- 14. ждать анимации, чтобы закончить, прежде чем возобновить
- 15. ждать запроса, чтобы закончить и возвращать данные
- 16. Android, ждать активностей, чтобы закончить в AsyncTask
- 17. ждать серии непрерывных задач, чтобы закончить
- 18. Ajax ждать до перенаправления, чтобы закончить выполнение.
- 19. Как закончить асинхронную работу
- 20. Как закончить работу?
- 21. ждать методы signalr закончить
- 22. Delphi Как ждать ответа сокета внутри процедуры?
- 23. Как получить селен, чтобы ждать ответа ajax?
- 24. Как заморозить мое приложение, чтобы ждать ответа?
- 25. Foreach ждать задачи закончить
- 26. AngularJS ждет ресурса внутри .run, чтобы закончить
- 27. JS Loop - как мне перебирать элементы X, а затем ждать ответа, чтобы закончить цикл
- 28. AngularJS ждать внешнего ответа функции, чтобы продолжить
- 29. Ждать сообщений, обрабатываемых служебной шиной OnMessage, чтобы закончить
- 30. Как я могу ждать мерзавца клона, чтобы закончить в GitPython
Я очень благодарен вам за Геннадию :) –