2016-10-03 277 views
0

我有一种方法可以在我的android应用程序中异步更新帐户列表。Android/Java:循环中的异步作业

的方法是这样的

public void updateAccounts(List<String> accountIds, final SampleCallback callback) { 
    for (String accountId : accountIds) { 
     getAccountsAsync(accountId, new MySampleCallback() { 
      @Override public void result(AccountResponse response) { 
       callback(response); 
      } 
     } 
    } 
} 

这是更新帐号的方法。

void getAccountsAsync(String accountId, final MySampleCallback callback) { 
    //Execution of request 
    callback.result(new AccountsResponse("Just a sample response from the service")); 
} 

,这是我的回调接口

public interface MySampleCallback{ 
    void result(AccountsResponse response); 
} 

的问题是,在我的执行循环,我只得到列表如 的最后一个项目的结果我有一个列表字符串 - >“一”,“二”,“三”

我得到的唯一结果是从最后一项是三。

另外两个被忽略,但是他们仍然被执行,但返回给我的唯一结果是最后一个项目。

我想要做的是,在循环的下一次迭代之前,我可以在执行下一个循环之前停止它吗?更像是运行使这个Async同步运行。

谢谢。

+0

看起来像你真的可以使用RxJava来(可能)简化这个 –

+0

@ cricket_007 RxJava与此无关 - 不要在小的时候建议一个巨大的锤子。 – manabreak

+0

我要检查一下,但是可以在我的用例中使用RxJava进行具体示例吗?谢啦! – Aaron

回答

0

我认为你试图解决这个错误的方式。您需要对N个项目进行异步调用。不要进行N次调用,而是编写一个在服务器上接收一个ID数组的单个调用。

+0

显然我不能这样做,因为我打电话的任务是一个网络抓取服务。在getAccountAsync里面,我加载了一个web视图来抓取网页,因此让我等待响应。一旦答复到达,我只能访问列表的最后一项。 – Aaron

+0

WHy你会加载一个Web视图来刮,而不是直接进行HTTP调用?这没有意义,听起来像是你问题的原因。有0个原因涉及图形元素。 –