我正在创建一个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
来处理所有的请求。我还必须每次设置/释放锁,并检查前一个请求是否成功,从而降低代码的可读性。
有没有更优雅的方法?
谢谢,斯蒂法诺
暂无答案!
目前还没有任何答案,快来回答吧!