同时多个排球请求

时间:2019-06-17 06:26:25

标签: java android multithreading android-volley

我需要同时发送4个http请求,并等到所有请求都完成为止(我正在使用凌空抽空)

我试图在4个线程中分别发送它们并使用thread.join,但似乎onResponse和onError方法正在主线程中运行,因此请求线程在调用queue.add(jsonArrayRequest)之后完成。

我不能使用countdownlatch,因为据我所知,首先它不会同时运行线程(它在队列中运行),其次它会阻塞主线程。

您的建议是什么?让我知道使用Retrofit,OkHttp或其他库是否有更好的方法。

1 个答案:

答案 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