【问题标题】:How do I wait for multiple Volley requests to complete?如何等待多个 Volley 请求完成?
【发布时间】:2016-10-04 15:56:39
【问题描述】:

我正在编写一个使用 Google 的 Volley API 执行一系列请求的应用。问题是我不知道请求何时完成。我需要知道请求是否已经完成,然后再继续前进。我不能只用 while 循环或 sleep/wait 方法等待一段时间,因为它似乎停止了正在执行请求的线程。显然,请求具有 onResponse 回调,我可以使用它来标记单个请求何时完成。但是我有一个发出多个请求的活动,我希望该活动处于待命状态,直到所有请求都得到处理。就像我说的那样,我不能简单地等待/睡眠,因为这会使请求队列进入睡眠状态。我需要编写一个监视请求的服务吗?我真的不知道该怎么做。

附:我正在使用here 描述的单例请求队列。

【问题讨论】:

  • 不等待就在onRespnse() 中调用另一个请求有什么问题?
  • 嗯,这实际上是一个聪明的主意。因此,您建议不要一次将所有请求排入队列,而是通过 onResponse 回调一次将它们链接起来?
  • 是的,这样你就可以保持流量。另外,我认为你在这里有更多的控制权。假设,你想做 10 个请求,但是,当 4 个请求完成时,服务器或互联网会以某种方式出现故障,那时你可以停止调用其他请求并向用户显示出现问题的通知。
  • 你能解决这个问题吗?我正在寻找类似问题的答案。如果您的解决方案有效,您能否更新一下?
  • 猜猜 OP 不想分享他们的知识

标签: java android android-volley


【解决方案1】:

如果请求不需要串行完成,您可以考虑使用 Java 的 CountDownLatch 来完成此操作。请在此处查看答案:How is CountDownLatch used in Java Multithreading? 了解更多详情。

【讨论】:

  • OP 的请求在同一个线程上,这将不起作用。
  • @SH7890,它在哪里说请求在同一个线程上? Volley 在后台处理线程。仅仅因为您从同一个线程发出请求并不意味着它们正在同一个线程中执行(事实上,如果它们是从活动中调用的,它们就不可能,否则会抛出 NetworkOnMainThread 异常)。
  • “因为它似乎停止了正在执行请求的线程。”我认为这意味着它们在同一个线程上执行,这也符合我自己的经验。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-05-19
  • 1970-01-01
  • 1970-01-01
  • 2016-12-12
  • 2015-04-17
  • 2011-07-01
相关资源
最近更新 更多