【问题标题】:multiple volley requests at same time多个凌空请求同时
【发布时间】:2019-06-17 06:26:25
【问题描述】:

我需要同时发送 4 个 http 请求并等待它们全部完成(我正在使用 volley)

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

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

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

【问题讨论】:

    标签: java android multithreading android-volley


    【解决方案1】:

    要在不使用任何模式或其他库的情况下实现它,您可以在请求响应时将请求标记为已完成,并调用方法,在每个请求中,如果所有请求都已完成,则要执行。在该方法上,您只需要检查是否所有请求都已完成。

    例子:

    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() 方法中:

    void doSomething() {
      if (isRequest1Finished && isRequest2Finished) {
        // do something with the response1, response2, etc....
      }
    }
    

    但我的建议是使用 RxJava,您可以在其中应用 zip 运算符,它将所有异步响应组合成一个结果:

    例子:

    Observable request1 = getRequest1();
    Observable request2 = getRequest2();
    
    Observable.zip(request1, request2,
      new BiFunction<Something, Something, Pair<Something, Something>() {
        @Override
        public Pair<Something, Something> apply(Something response1, Something response2) {
          return new Pair(response1, response2); // you can create a custom object to handle all of the responses
        }
      })
      .map( // do something with your responses )
    

    【讨论】:

      猜你喜欢
      • 2014-08-31
      • 1970-01-01
      • 1970-01-01
      • 2016-12-17
      • 1970-01-01
      • 1970-01-01
      • 2011-11-28
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多