簡體   English   中英

如何使應用程序等待線程執行完畢?

[英]How to make the application wait until a thread has executed?

在我的應用程序中,當活動開始時,我必須將一個帳戶的清單從一個片段發送到另一個片段。 我在以下線程中獲得帳戶列表,並將其保存在全局ArrayList中。 如果對服務器的請求正確,則將用必要的信息填充ArrayList。 然后,在通過捆綁包將數據從一個片段傳輸到另一個片段之前,我先調用loadAccounts方法。 問題在於,在我想在片段之間發送數據之前,線程無法完成其執行,因此發送數據時ArrayList將為NULL。 如何讓應用程序等到線程執行后才將數據發送到另一個片段?

我的線程如下所示:

public void loadAccounts() {

LoadAccounts loadAccountsThread = new LoadAccounts(new Handler() {

    public void handleResult(Result result) {
        switch (result) {
            case SUCCESSFUL_CODE:
                accountsList = (ArrayList<Account>) accounts;
                break;
            case FAILED_CODE:
                errorMsg = error.toString();
                showDialog(errorMsg);
            default:
                break;
        }
    }
});
loadAccountsThread.start();

}

而在onCreate方法中,我這樣做:

loadAccounts();
                Bundle args = new Bundle();
                AccountsFragment fragment = new AccountsFragment ();
                args.putSerializable("accounts", accountsList.get(0));
                fragment.setArguments(args);
                getSupportFragmentManager().beginTransaction()
                        .replace(R.id.rightConent, fragment).commit();

任何幫助,將不勝感激。 謝謝。

您不想讓您的應用程序等待,因為這會使您的應用程序變慢甚至在出現錯誤的情況下卡住。

不要通過捆綁包發送帳戶。 而是在您的AccountsFragment中創建一個方法

public void setAccounts(ArrayList<Account> accounts){
    //do whatever you need with your accounts here
}

然后,當您擁有SUCCESSFUL_CODE時,在handleResult方法中運行

fragment.setAccounts((ArrayList<Account>) accounts);

當然,要做到這一點,請確保您的AccountFragment片段是一個字段,而不是onCreate內的局部變量。 確保在運行線程之前實例化Fragment

如果要調用Web服務,請使用AsyncTask而不是線程,並將其放在方法中

Bundle args = new Bundle();
            AccountsFragment fragment = new AccountsFragment ();
                args.putSerializable("accounts", accountsList.get(0));
                fragment.setArguments(args);
                getSupportFragmentManager().beginTransaction()
                        .replace(R.id.rightConent, fragment).commit(); 

並使用上下文從onPostExecute()方法調用該方法

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM