我需要同时发送4个http请求,并等到所有请求都完成为止(我正在使用凌空抽空)
我试图在4个线程中分别发送它们并使用thread.join,但似乎onResponse和onError方法正在主线程中运行,因此请求线程在调用queue.add(jsonArrayRequest)之后完成。
我不能使用countdownlatch,因为据我所知,首先它不会同时运行线程(它在队列中运行),其次它会阻塞主线程。
您的建议是什么?让我知道使用Retrofit,OkHttp或其他库是否有更好的方法。
答案 0 :(得分:2)
要在不使用任何模式或其他库的情况下实现该请求,可以将请求标记为已响应(如果已响应),然后在所有请求都已完成的情况下在每个方法中调用该方法。使用该方法,您只需检查是否所有请求都已完成。
示例:
private void Awake()
{
// This makes sure the callback is added only once
Game.OnInitialized -= OnGameInitialized;
Game.OnInitialized += OnGameInitialized;
}
private void OnDestroy()
{
// always make sure to remove callbacks if no longer needed
Game.OnInitialized -= OnGameInitialized;
}
privtae void OnGameInitialized()
{
offset = transform.position - Game.currentPlayer.transform.position;
}
以及您的isRequest1Finished = false;
isRequest2Finished = false;
response1 = null;
response2 = null;
volleyRequest1(new Response.Listener<Something>() {
@Override
public void onResponse(Something response) {
isRequest1Finished = true;
response1 = response;
doSomething();
}
})
volleyRequest2(new Response.Listener<Something>() {
@Override
public void onResponse(Something response) {
isRequest2Finished = true;
response2 = response;
doSomething();
}
})
//....do on all of your requests
方法中
doSomething()
但是我的建议是使用RxJava,您可以在其中应用void doSomething() {
if (isRequest1Finished && isRequest2Finished) {
// do something with the response1, response2, etc....
}
}
运算符,该运算符将所有异步响应合并为一个结果:
示例:
zip