[英]onPostExecute not being called
我在嘗試使用onPostExecute解決這段代碼時遇到問題,我是java新手,特別是多線程,所以如果我正在做的是完全錯誤,請隨意糾正我...需要學習。
所以問題在於:
public class DataTask extends AsyncTask<Void, Void, Integer> {
Context context;
DataTask(Context context) {
this.context = context.getApplicationContext();
}
// Global Int for counting how many Tasks have been completed
int asynCount = 0;
ArrayList<String> arr_dataVts=new ArrayList<String>();
ArrayList<String> arr_dataNtm=new ArrayList<String>();
ArrayList<String> arr_dataOdas=new ArrayList<String>();
ArrayList<String> arr_dataMetAll=new ArrayList<String>();
ArrayList<String> arr_dataMet3HrTask=new ArrayList<String>();
ArrayList<String> arr_dataTideTask=new ArrayList<String>();
@Override
protected Integer doInBackground(Void... params) {
//VtsAsyncTask
VtsTask task1 = new VtsTask();
task1.executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR);
//NtmAsyncTask
NtmTask task2 = new NtmTask();
task2.executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR);
//OdasAsyncTask
OdasTask task3 = new OdasTask();
task3.executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR);
//MetAllTask
MetAllTask task4 = new MetAllTask();
task4.executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR);
//Met3HrTask
Met3HrTask task5 = new Met3HrTask();
task5.executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR);
//TideTask
TideTask task6 = new TideTask();
task6.executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR);
return 1;
}
所有任務都應該執行
但是在onPostExecute中:
@Override
protected void onPostExecute(Integer result) {
if (asynCount == 6){
//start intents for main activity
System.out.println("asynCount has reached= " + asynCount + " so now starting MainActivity");
Intent intent = new Intent(context, MainActivity.class);
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
intent.putStringArrayListExtra("data1", arr_dataVts);
intent.putStringArrayListExtra("data2", arr_dataNtm);
intent.putStringArrayListExtra("data3", arr_dataOdas);
intent.putStringArrayListExtra("data4", arr_dataMetAll);
intent.putStringArrayListExtra("data5", arr_dataMet3HrTask);
intent.putStringArrayListExtra("data6", arr_dataTideTask);
// context.startActivity(intent);
}else{
//update dialogue
}
}
}
onPostExecute永遠不會被調用? 我不知道為什么。 我嘗試過使用Integers,Void和Booleans讓它返回但是不起作用。 所有建議表示贊賞。 編輯:我現在意識到我應該在這里使用Bundle來獲取所有額外內容。
您的DataTask
類是不必要的。 你在后台做的唯一事情是啟動其他幾個AsyncTask你不需要在自己的AsyncTask中包裝所有那些execute()命令,因為它們已經在后台線程中執行,只是因為AsyncTask的性質。
您擁有的其他每個任務都需要擁有它自己的onPostExecute()
,它處理來自該特定任務的結果並對其執行某些操作。
編輯:
如果將所有操作合並為一個AsyncTask,下面是一些偽代碼:
public class DataTask extends AsyncTask<Void, Void, Integer> {
Context context;
DataTask(Context context) {
this.context = context; // <-- you already have a context, you don't need to call getApplicationContext();
}
@Override
protected Integer doInBackground(Void... params) {
doSomeWork();
doSomeOtherWork();
doYetSomeMoreWork();
//...
}
@Override
protected void onPostExecute(Integer result) {
doSomethingWithThe(result);
}
}
doSomeWork()
等...方法不應該是AsyncTasks,只是常規方法,以便它們按順序執行。 這樣,當所有這些都完成后, onPostExecute()
將被調用。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.