[英]how to make thread wait until another thread has completed that method execution
[英]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.