使用intentservice获取7 Rss Feed链接的数据,并在后台使用“Google Volley”并使用ResultReceiver获取结果,但我无法配置如何等待凌空响应完成它的工作使用ResultReceiver触发标志以显示MainActivity中的数据
答案 0 :(得分:5)
你不应该等待它。您有两种方式来发出网络请求:同步和异步。如果使用同步,则不要等待结果,因为网络调用是阻塞操作。
如果您想要朝这个方向发展,请参阅此项:Can I do a synchronous request with volley?
如果您想使其异步,您只需启动请求,然后在请求完成后在ResultReceiver
回调方法中使用Response.Listener
。
详情请参阅: https://guides.codepath.com/android/Networking-with-the-Volley-Library
如果您仍然认为应该阻止当前线程并等待结果,则应使用CountDownLatch
。创建一个后台线程(你不能在android中阻止UI线程,除非它是一个单独的进程),使用count 1初始化你的latch并调用await()
方法。这将阻止您的后台线程,直到计数为0.完成后台任务后,请致电countDown()
,这将取消阻止您的后台线程,然后您就可以执行操作了。
答案 1 :(得分:0)
official Volley Google Group回答了这个问题。
使用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(...)
中使用超时,否则您的线程将锁定。