2016-10-03 58 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個原因涉及圖形元素。 –