Форум программистов, компьютерный форум CyberForum.ru

Программирование Android

Войти
Регистрация
Восстановить пароль
 
PYPS
 Аватар для PYPS
51 / 50 / 7
Регистрация: 12.07.2011
Сообщений: 542
Завершенные тесты: 3
#1

Async_Tasc появление ProgressDialog - Android

17.10.2014, 11:09. Просмотров 583. Ответов 7
Метки нет (Все метки)

При запуске Async Tasc в onPreExecute() создаётся и должен появится ProgressDialog.
но он не появляется сразу.
Вызываю AsyncTasc вот так:
Java
1
2
3
AsyncT AT = new AsyncT();
AT.execute(....);
result=AT.get(20,TimeUnit.SECONDS);
Не появляется он из за последней строки, не пойму как это исправить.
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Netscape
 Аватар для Netscape
371 / 358 / 48
Регистрация: 02.10.2009
Сообщений: 712
Записей в блоге: 4
17.10.2014, 12:45     Async_Tasc появление ProgressDialog #2
Цитата Сообщение от PYPS Посмотреть сообщение
Не появляется он из за последней строки, не пойму как это исправить.
удалить ее.
PYPS
 Аватар для PYPS
51 / 50 / 7
Регистрация: 12.07.2011
Сообщений: 542
Завершенные тесты: 3
17.10.2014, 13:48  [ТС]     Async_Tasc появление ProgressDialog #3
а как получить в переменную результат работы async tasca?
Sony17
28 / 28 / 6
Регистрация: 24.05.2013
Сообщений: 157
17.10.2014, 13:52     Async_Tasc появление ProgressDialog #4
Цитата Сообщение от PYPS Посмотреть сообщение
result=AT.get(20,TimeUnit.SECONDS);
Потому что AsyncTask.get() блокирует UI поток, следовательно диалог не может появиться до окончания работы AsyncTask'а.
PYPS
 Аватар для PYPS
51 / 50 / 7
Регистрация: 12.07.2011
Сообщений: 542
Завершенные тесты: 3
17.10.2014, 13:55  [ТС]     Async_Tasc появление ProgressDialog #5
Прочел документацию вы совершенно верно говорите, но как тогда сделать чттоб при выполнении AsyncTasc крутился прогресс диалог, а по завершению получить из AsyncTasca значения в переменную
Sony17
28 / 28 / 6
Регистрация: 24.05.2013
Сообщений: 157
17.10.2014, 14:27     Async_Tasc появление ProgressDialog #6
Цитата Сообщение от PYPS Посмотреть сообщение
по завершению получить из AsyncTasca значения в переменную
1) Создать ресивер, перед началом работы AsyncTask'а зарегистрировать его. В onPostExecute() отправить сообщение, указав Intent с таким же action, как и у ресивера и добавив в этот Intent значение своей переменной. В методе onReceive() принять этот Intent, достать из него переменную и затем снять регистрацию ресивера.

2) В классе, который запускает AsyncTask, создать поле(напр. String valueMainClass = ""). В классе, реализующем AsyncTask, создать такую же переменную(String valueAsyncTask = null). В конструкторе AsyncTask'а указать ссылку для valueAsyncTask:

Java
1
2
3
public Constructor(String value) {
     this.valueAsyncTask  = value;
}
В onPostExecute() присвоить результат работы AsyncTask полю valueAsyncTask.
Тем временем, в MainClass'е проверять зн-е поля valueMainClass:

Java
1
2
3
4
do {
   // устанавливаем задержку, чтобы цикл как сумашедший не крутился
   // если зн-е поля valueMainClass изменилось, то работаем дальше
} while(valueMainClass.equals(""))
YuraAAA
 Аватар для YuraAAA
1564 / 1306 / 269
Регистрация: 25.10.2009
Сообщений: 3,424
Записей в блоге: 2
17.10.2014, 14:37     Async_Tasc появление ProgressDialog #7
Почему не воспользоваться интерфейсом?

Java
1
2
3
public interface OnCompleteListener<T> {
        void onSuccess(T result);
    }
Передаём его в асинк таску

Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
public class AbsTask extends AsyncTask<Void, Void, String> {
 
        private OnCompleteListener<String> listener;
 
        public AbsTask(OnCompleteListener<String> listener) {
            this.listener = listener;
        }
 
        @Override
        protected void onPreExecute() {
            super.onPreExecute();
            //Dialog here!
        }
 
        @Override
        protected String doInBackground(Void... params) {
            return null;
        }
 
        @Override
        protected void onPostExecute(String s) {
            super.onPostExecute(s);
            //Dialog off
            if (listener != null) {
                listener.onSuccess(s);
            }
        }
    }
Profit!
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
17.10.2014, 17:34     Async_Tasc появление ProgressDialog
Еще ссылки по теме:

Android EditText и появление клавиатуры
Android Как показать ProgressDialog при долгом построении UI?
Android ProgressDialog upload fpt server
Android Рандомное появление "предметов" на карте гугл
Android Запрос http + ProgressDialog

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
Gabberr
 Аватар для Gabberr
101 / 101 / 17
Регистрация: 13.10.2009
Сообщений: 402
17.10.2014, 17:34     Async_Tasc появление ProgressDialog #8
при повороте экрана скорей всего возникнут проблемы, вот отличный пост и исходники прилогаются
http://habrahabr.ru/post/114570/
Yandex
Объявления
17.10.2014, 17:34     Async_Tasc появление ProgressDialog
Ответ Создать тему
Опции темы

Текущее время: 02:37. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru