Как выполнить код только после того, как какой-то асинхронный закончил выполняться? - PullRequest
0 голосов
/ 26 января 2019

Я новичок в программировании и разработке Android. У меня есть 3 асинхронных метода для получения данных с сервера в моем MainActivity, скажем, он называется

getUserDataFromServer()
getProductsDataFromServer()
getBannersFromServer()

если каждый запрос занимает 1 секунду, то для завершения этих 3-х запросов ему требуется 3 секунды. Если я последовательно (один за другим) создаю цепочку.

так что я хочу ... Я хочу сделать эти 3 запроса асинхронно (параллельно), а затем, если эти 3 запроса были выполнены (неудачно или успешно), то я хочу сделать что-то еще, скажем, чтобы показать вверх тост сообщение. так что я могу закончить это быстрее, может быть, это займет около 1,2 с, а не 3 с.

Я не знаю, как это сделать или как вызывается специальный метод, чтобы обернуть его в Android?

как это сделать на Java или Kotlin?

1 Ответ

0 голосов
/ 26 января 2019

Следующий код должен помочь вам начать работу в ваших целях. Там также есть объяснения того, что происходит. Вы можете изменить параметры по мере необходимости:

Выполнение задания:

MyTask myTask = new MyTask();
myTask.execute(String1);

//OR:
new MyTask().execute(String1, String2, String3...);

Создание задачи:

//The first type in AsyncTask<> is for specifying the type of input given.
//Second parameter: Type of data to give to onProgressUpdate.
//Third parameter: Type of data to give to onPostExecute.
private class MyTask extends AsyncTask<String, String, String> {

    private String resp;
    ProgressDialog progressDialog;

    @Override
    protected String doInBackground(String... params) {
        publishProgress("Processing ..."); // Calls onProgressUpdate()
        //params is the input you've given that can be used for processing.

        getUserDataFromServer()
        getProductsDataFromServer()
        getBannersFromServer()

        //Result is the String to give onPostExecute when the task is done executing.
        String result = "Done Processing";
        return result;
    }

    @Override
    protected void onPostExecute(String result) {
        // Get the result from your task after it is done running.
        progressDialog.dismiss();
        //IMPORTANT: As you asked in your question, you can now execute whatever code you 
        //want since the task is done running.

    }

    @Override
    protected void onProgressUpdate(String... text) {
        //Progress has been updated. You can update the proggressDialog.       
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...