|
12 / 12 / 3
Регистрация: 28.03.2014
Сообщений: 156
|
|
ProgressBar во время загрузки данных04.09.2014, 21:43. Показов 5178. Ответов 12
Метки нет (Все метки)
Есть activity с navigationdrawer-ом, который переставляет фрагменты. В центре фрагмента крутится прогресс бар, а позади него ListView с свойством visibility="gone". Я скачиваю данные и заполняю ими список, и в конце меняю видимость прогресс бара и списка.Только вот во время скачивания данных приложение как бы виснет, пока не получит данные, прогресс бар не крутится, action bar не меняется. Пробовал поместить загрузку данных в AsyncTask и в Runnable но зависание остается. С загрузкой из БД все быстро. Как сделать что бы прогресс бар крутился и данные загружались?
0
|
|
| 04.09.2014, 21:43 | |
|
Ответы с готовыми решениями:
12
Обновление ProgressBar-a во время загрузки SQLite DB при включении приложения Выводить текст в Label во время загрузки ProgressBar
|
|
12 / 12 / 3
Регистрация: 28.03.2014
Сообщений: 156
|
|||||||||||
| 05.09.2014, 23:15 [ТС] | |||||||||||
|
YuraAAA, вот так с AsyncTask:
0
|
|||||||||||
|
535 / 504 / 114
Регистрация: 12.03.2014
Сообщений: 1,671
|
|
| 05.09.2014, 23:52 | |
|
0
|
|
|
12 / 12 / 3
Регистрация: 28.03.2014
Сообщений: 156
|
|
| 07.09.2014, 23:13 [ТС] | |
|
YuraAAA, new GetToDos(getActivity()).execute().get(); - это же тоже AsyncTask. Если перенести это в doInBackground то ничего не работает(прогресс бар продолжает крутится, а список не появляется).
0
|
|
|
12 / 12 / 3
Регистрация: 28.03.2014
Сообщений: 156
|
|
| 08.09.2014, 16:26 [ТС] | |
|
YuraAAA, этот AsyncTask скачивает и возвращает JSON строку. Написал его я
0
|
|
|
426 / 406 / 68
Регистрация: 06.10.2012
Сообщений: 1,748
|
|
| 09.09.2014, 10:11 | |
|
shulyakyarik, по правилам AsyncTask, код в onPreExecute и в inPostExecute может обращаться к интерфейсу, а в doInBackground - нет. Посему, все "долгоиграющие" операции, связанные с вычислениями, обращениям в БД, URL, файлам и т.д. должны находиться в doInBackground, а всё остальное - в onPreExecute и onPostExecute. Кстати, эти 2 последних метода могут и вовсе отсутствовать. Поэтому обычно в onPreExecute и onPostExecute ставится режим видимости или невидимости ProgressBar, а также вывод всевозможных данных на экран. Если не ошибаюсь, значение имеют также результаты, возвращаемые функциями. У вас они ничего не возвращают (void), и возможно, поэтому ProgressBar не крутится.
0
|
|
|
535 / 504 / 114
Регистрация: 12.03.2014
Сообщений: 1,671
|
|
| 09.09.2014, 11:45 | |
|
CoolMind, не совсем верно, в doInBackground() можно обращаться к ui, но только если элементы к которым обращаешься не видно. Например есть LinearLayout с visibility = GONE, на него можно добавить сколь угодно элементов в doInBackground(), а в onPostExecute() сделать visibility = VISIBLE. Так же можно добавлять по элементу за раз (например при загрузке кучи картинок с интернета) методом publishProgress() этот метод будет передавать параметры в метод onProgressChanged()(точно не помню название, что-то похожее) и он(этот onProgressChanged()) может работать с ui потоком в штатном режиме.
1
|
|
|
426 / 406 / 68
Регистрация: 06.10.2012
Сообщений: 1,748
|
|
| 19.09.2014, 11:30 | |
|
Spelcrawler, сегодня проверил. При попытке доступа к UI-элементам, хоть INVISIBLE, хоть GONE - вылет с ошибкой "Caused by: android.view.ViewRootImpl$CalledFromWron gThreadException: Only the original thread that created a view hierarchy can touch its views".
Так что доступ к UI-элементам - только в onPreExecute и onPostExecute.
0
|
|
|
535 / 504 / 114
Регистрация: 12.03.2014
Сообщений: 1,671
|
||
| 19.09.2014, 11:43 | ||
|
CoolMind, странно это. У меня работало, но я добавлял элементы в AlertDialog до его отображения. Т.е. в принципе того куда я это добавлял вообще не было). И еще у меня в одном AsynkTaske срабатывал Toast, а в другом - нет. Возможно зависит от контекста.
Добавлено через 6 минут А, понял в чем дело: я создавал этот диалог прямо в doInBackround, то есть
1
|
||
|
426 / 406 / 68
Регистрация: 06.10.2012
Сообщений: 1,748
|
|
| 26.09.2014, 10:04 | |
|
Spelcrawler, вообще, это всё интересно, конечно. Я недавно ваш метод решил применить при асинхронной загрузке Яндекс-карт. Создал их в doInBackground, тут же скрыл, потом сделал необходимые действия, а в onPostExecute отобразил и доделал некоторые вещи типа отображения кнопок приближения. Не скажу, что быстрее получилось (хотя, может быть), но зато действительно, можно получить доступ к UI-элементам, созданным в doInBackground. Яндекс-карты я потом выбросил, потому что они почему-то всё равно не грузятся на Android 4.4.2, а причину поймать так и не смог.
Добавлено через 12 минут Не знаю, правильно ли рассуждаю, но в некоторых случаях даже обращение к getActivity() в doInBackground может привести к ошибке. Некоторые классы и компоненты требуют доступа к контексту, ну и изредка я писал напрямую, допустим, new Preferences(getActivity()). Что иногда приводило к ошибке. Теперь везде заменяю на context (типа Context), а в методе onCreateView пишу: "context = getActivity();".
1
|
|
| 26.09.2014, 10:04 | |
|
Помогаю со студенческими работами здесь
13
Время загрузки данных Изменить содержимое Cell во время загрузки данных в DataGrid Скачивание файла WebClient с отображением процентов загрузки файла, progressBar, скоростью загрузки файла Нет изображения после загрузки биоса, во время загрузки системы
Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога
Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
|
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
|
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога
В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
|
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога
Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
|
|
SDL3 для Web (WebAssembly): Установка Emscripten SDK (emsdk) и CMake для сборки C и C++ приложений в Wasm
8Observer8 30.01.2026
Содержание блога
Для того чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. . . .
|
SDL3 для Android: Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога
Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
|
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования.
Часть библиотеки BedvitCOM
Использованы. . .
|
SDL3 для Android: Загрузка PNG с альфа-каналом с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога
SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
|