У меня возникли проблемы с попыткой попасть в onPostExecute, чтобы запустить этот кусок кода, я новичок в java и особенно многопоточность, поэтому, если то, что я делаю, совершенно неправильно, пожалуйста, не стесняйтесь исправить меня .. чтобы учиться.onPostExecute не называется
Так что проблема с этим:
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 никогда не вызывается? Я не знаю почему. Я попытался использовать целые числа, Void и Booleans, чтобы вернуть их, но не работает. Все советы приветствуются. EDIT: Теперь я понимаю, что я действительно должен использовать Bundle здесь для всех дополнительных функций.
Привет, Причина, по которой это было в его собственном классе, состояла в том, чтобы я мог позвонить в любое время из своего приложения, чтобы обновить ui. Каким будет правильный метод ... вызывать все задачи индивидуально? –
Да, вы могли бы назвать их по отдельности. Также, учитывая код, который вы опубликовали, похоже, что onPostExecute(), вероятно, вызывает вызов, но из-за вашего оператора if на самом деле ничего не делает. Вы инициализируете asycCount равным 0, а затем проверяете, равен ли он 6, которого он никогда не будет, потому что вы никогда не меняете его с 0. – FoamyGuy
извините, моя вина. asynCount добавляется каждый раз, когда заканчивается одна из задач. Я не включил код для задач, но теперь буду делать это. –