3 / 3 / 0
Регистрация: 21.03.2015
Сообщений: 67
|
|
1 | |
Как приостановить doInBackground() из AsyncTask28.03.2015, 17:56. Показов 2328. Ответов 22
Метки нет (Все метки)
Здравствуйте.
Есть экземпляр AsyncTask и активити с WebView. AsyncTasd выполняет действия с сетью, передает некий url WebView. WebView загружает станицу авторизации(login-password). В конце WebView получает код авторизации, который нужно передать снова AsyncTask для продолжения выполнения задач с сетью. Как на время авторизации(login-password) приостановить выполнение и завершение doInBackground? А потом, после авторизации и передачи данных в AsyncTask снова запустить его выполнение? Есть ли в AsynkTask некий метод "pause()"? Спасибо
0
|
28.03.2015, 17:56 | |
Ответы с готовыми решениями:
22
AsyncTask doInbackground и onPostExecute выполняются параллельно ? Java.lang.RuntimeException: An error occurred while executing doInBackground() Как остановить AsyncTask? Как приостановить процесс |
912 / 560 / 88
Регистрация: 13.02.2014
Сообщений: 2,081
|
|
29.03.2015, 13:04 | 2 |
Нету такого, используй еще один AsyncTask.
1
|
3 / 3 / 0
Регистрация: 21.03.2015
Сообщений: 67
|
|||||||||||
19.04.2015, 12:52 [ТС] | 3 | ||||||||||
Еще одна похожая ситуация.
Есть MainActivity, фрагмент кода
connector -- объект класса, унаследованного от AsyncTask. Он выполняет подключение к web сервису, загрузку данных и формирование массива объектов productsArray. после вышеуказанной строчки код MainActivity
При запуске получается ошибка Код
java.lang.IllegalStateException: Could not execute method of the activity И, только после того, как массив productsArray сформирован, запускать intent и передавать ему данные. Прав ли я насчет ошибки, и если да, то как приостановить выполнение главного потока, дождаться выполнения doInBackground в фоновом потоке, а потом снова запустить главный поток, тем самым запустив активити юзер интерфейса?
0
|
912 / 560 / 88
Регистрация: 13.02.2014
Сообщений: 2,081
|
|
19.04.2015, 15:14 | 4 |
Прав. Можно запускать ProductsViewActivity из AsyncTask или использовать callback метод (есть темы на форуме).
1
|
3 / 3 / 0
Регистрация: 21.03.2015
Сообщений: 67
|
|||||||||||
19.04.2015, 17:00 [ТС] | 5 | ||||||||||
разобрался. буду пока запускать из onPostExecute()
теперь вопрос в передаче данных
Код
java.lang.RuntimeException: Parcel: unable to marshal value .........................
0
|
3 / 3 / 0
Регистрация: 21.03.2015
Сообщений: 67
|
|||||||||||
24.04.2015, 16:29 [ТС] | 6 | ||||||||||
С вышесказанным разобрался. При передачей пользовательских объектов между активностями (в моем случае это объект класса Product) класс должен быть implement Parcelable.
Еще вопрос про AsyncTask. Есть класс Connector extends AsyncTask Он выполняет подключение к сервису и должен вернуть два объекта -- accessToken и service (это объекты библиотеки подключения к сервису -- не суть важно в этом вопросе) Процесс подключения:
Как приостановить основной поток, чтобы когда создается экземпляр RequestMaker, doInBackground уже выполнился? Можно было бы вернуть параметр из onPostExecute, если бы он был один. Или создать класс-обертку для этих двух параметров?
0
|
75 / 75 / 7
Регистрация: 29.03.2012
Сообщений: 256
|
|
24.04.2015, 16:43 | 7 |
предлагаю сделать 2 asynctask, и запускать второй из PostExecute первого
1
|
3 / 3 / 0
Регистрация: 21.03.2015
Сообщений: 67
|
||||||
25.04.2015, 14:07 [ТС] | 8 | |||||
AsyncTask дает спагетти-код...
Добавлено через 2 часа 6 минут doInBackground не может выполняться несколько раз? если в одном месте запустил
если можно, то как?
0
|
3 / 3 / 0
Регистрация: 21.03.2015
Сообщений: 67
|
|
25.04.2015, 14:41 [ТС] | 10 |
0
|
75 / 75 / 7
Регистрация: 29.03.2012
Сообщений: 256
|
|
26.04.2015, 10:08 | 11 |
повторить можно, создав новый экземпляр AsyncTask'a
new AsyncTask.execute();
1
|
3 / 3 / 0
Регистрация: 21.03.2015
Сообщений: 67
|
|
26.04.2015, 11:03 [ТС] | 12 |
да, так и делаю
приходится передавать в конструктор объекта asynctask ссылку на активити, в которой нужно обновить ui. запутанно как-то...
0
|
75 / 75 / 7
Регистрация: 29.03.2012
Сообщений: 256
|
|
26.04.2015, 12:00 | 13 |
в таких случаях мне кажется проще вложенные классы использовать
1
|
3 / 3 / 0
Регистрация: 21.03.2015
Сообщений: 67
|
|
26.04.2015, 12:16 [ТС] | 14 |
Согласен, но класс получается сильно объемным. При развитии проекта возвращаюсь через неделю к ранее написанному и приходится тратить время, чтобы вспомнить, за что отвечает метод и как он работает. Это через неделю. А через месяц? Через год?
Или подход неправильный?
0
|
75 / 75 / 7
Регистрация: 29.03.2012
Сообщений: 256
|
|
26.04.2015, 12:19 | 15 |
комментарии! чем больше - тем проще править старый код + это хороший стиль программирования
Добавлено через 43 секунды плюс классы можно можно делить на регионы, погугли эту тему
1
|
3 / 3 / 0
Регистрация: 21.03.2015
Сообщений: 67
|
|
26.04.2015, 12:53 [ТС] | 16 |
погуглил, вот [ru.stackoverflow запрещен]
как по мне, это получится то же самое, что класс-наследник asynctask вынести в отдельный файл. Или
0
|
75 / 75 / 7
Регистрация: 29.03.2012
Сообщений: 256
|
||||||
27.04.2015, 09:31 | 17 | |||||
1
|
3 / 3 / 0
Регистрация: 21.03.2015
Сообщений: 67
|
|
27.04.2015, 11:33 [ТС] | 18 |
хоть убей, в сети тоже не могу найти что потом с этим делать...
Добавлено через 5 минут аа, его можно просто сворачивать?
0
|
75 / 75 / 7
Регистрация: 29.03.2012
Сообщений: 256
|
|
27.04.2015, 11:35 | 19 |
ох, ладно. совсем тебя запутал наверное.
Регион - это способ разделить код большого класса на некие группы, и сворачивать их в редакторе. для больших классов - это одно из решений. От больших классов, особенно в задачах, где есть массивные вычисления - не уйти. И дабы все это было удобочитаемо, и понятно заменяющему тебя разработчику - надо делать как можно более подробные и понятные комментарии, описание классов, методов, параметров. по твоей задаче: тебе надо сделать вложенный класс AsyncTask, а все расчеты вынести в другой класс. Тогда у тебя не будет и нагромождения внутри activity, и весь код будет более менее структурирован. Но в любом случае приучай себя писать комментарии. это очень важная привычка для разработчика. Кто-то сначала комментариями описывает структуру класса (как набросок), а потом реализовывает. кто-то (как я) сначала пишет код, потом подчищает, структурирует и комментирует.
1
|
3 / 3 / 0
Регистрация: 21.03.2015
Сообщений: 67
|
|
27.04.2015, 11:38 [ТС] | 20 |
я понял. эти тэги дают возможность просто свернут кусок кода, чтобы было видно только lable, который сам называешь.
0
|
27.04.2015, 11:38 | |
27.04.2015, 11:38 | |
Помогаю со студенческими работами здесь
20
Как приостановить цикл? как приостановить программу? Как приостановить поток? Как приостановить программу? Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |