当Volley RequestQueue完成所有任务后,如何回调?

4

我正在使用Android的Volley网络库。我想找到一种方式,在一堆请求完成时得到通知,而不是逐个检查所有响应侦听器(我也这样做)。是否有一种简单的方法可以在所有任务完成时从队列中获取回调?

2个回答

5
保持请求计数在一个成员变量中,每次请求完成时递减,当计数器达到0时,你就完成了!我不知道是否有一个回调函数可以跟踪所有请求并在最后返回。
int requestPending= 0;
for(int i=0;i<numberOfRequests;i++)
{
    requestQueue.add(request);
    requestPending++;
}
// For each requestQueue item finished onResponse received, do requestPending --

1

我找到了另一种适合我的方法。它的效果非常好。

RequestQueue queue = Volley.newRequestQueue(getApplicationContext());
  final AtomicInteger requestsCounter = new AtomicInteger(0);

  for (String data: someArray) {
    requestsCounter.incrementAndGet();

    queue.add(new StringRequest(
      Request.Method.GET,
      "https://stackoverflow.com",
      response -> {
         ...some stuff for response
      },
      error -> {
         ...catch error here
      }
  ));

  queue.addRequestFinishedListener(request -> {
      requestsCounter.decrementAndGet();

      if (requestsCounter.get() == 0) {
          ...all requests are done
      }
  });
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接