requestqueue:如何等待要处理的响应以运行下一个请求

n7taea2i  于 2021-08-25  发布在  Java
关注(0)|答案(0)|浏览(370)

我正在创建一个android应用程序,它必须向api发出一些顺序请求。我把每个 Request 变成 RequestQueue 待处理。然而每个 Request 需要一些来自上一步结果的参数 Request 如果之前的 Request 失败。
现在我的解决方案是:

private final Object lock = new Object();
private boolean success = false;

private void releaseLock() {
   synchronized (lock) {
      lock.notifyAll();
   }
}

private void setLock() {
   synchronized (lock) {
      try {
         lock.wait(60000);
      } catch (InterruptedException e) {
         e.printStackTrace();
      }
   }
}

private void fetch() {
   StringRequest request1 = new StringRequest(
      Request.Method.GET,
      url,
      response -> {
         success = true;
         releaseLock()
      }),
      error -> {
         success = false;
         releaseLock();
      }) {...};

   StringRequest request2 = ...

   new Thread(()->{
      success = false;
      requestQueue.add(request1);
      setLock();

      if (!success)
         return;

      success = false;
      requestQueue.add(request2);
      setLock();
   }).start()
}

在我看来,这种方法的问题在于它实际上没有利用 RequestQueue 因为它总是由一个元素组成,我必须手动示例化 Thread 来处理所有的请求。我还必须每次设置/释放锁,并检查前一个请求是否成功,从而降低代码的可读性。
有没有更优雅的方法?
谢谢,斯蒂法诺

暂无答案!

目前还没有任何答案,快来回答吧!

相关问题