Intereting Posts
Android: данные, передаваемые по радио и Wi-Fi Java.security.UnrecoverableKeyException: нет совпадений Получить эскиз Uri / путь к изображению, сохраненный в SD-карте + Android Ошибка IDEA 12 «Невозможно перезагрузить список AVD: анализ ошибок /tools/lib/devices.xml»? Firebase onMessageReceived не вызывается, когда приложение в фоновом режиме Получение Android Google Map v2, работающего в версии выпуска, путем создания отпечатка SHA1 для ключа API Существует ли многоплатформенная платформа для разработки приложений для iPhone / Android? Как добавить пакет java.awt.image в Android Как использовать artifactoryPublish для публикации релизов и отладки артефактов DeadObjectException в приложении для Android Android: как сделать кликабельное изображение карты с каждой страной, производя другое действие? SoundCloud, как форма поиска сигналов? Невозможно построить проект для iOS от cordova cli Java.io.IOException: в ICS 4.0.3 полученная проверка подлинности завершена Как получить зарегистрированный адрес электронной почты пользователя с помощью Graph Request в Facebook Android sdk 4.0

Показать диалог вращающегося колеса при загрузке данных на Android

Я хочу показать диалог вращающегося колеса, в то время как мое приложение загружает некоторые данные:

Диалог с вращающимся колесом

Диалоговое окно вращающегося колеса должно отображаться нажатием кнопки. Я использую код ниже, но теперь он показывает вращающееся колесо. В чем может быть проблема?

public void CheckAccount(String username, String password) { try { final ProgressDialog progDailog = ProgressDialog.show(this, "Progress_bar or give anything you want", "Give message like ....please wait....", true); new Thread() { public void run() { try { // sleep the thread, whatever time you want. sleep(1000); } catch (Exception e) { } progDailog.dismiss(); } }.start(); //getting data code here //getting data code here //getting data code here //getting data code here //getting data code here } catch (Exception e) { Log.e(LOG_TAG, e.getMessage()); PopIt("CheckAccountError", e.getMessage(), "Denied"); } } 

Solutions Collecting From Web of "Показать диалог вращающегося колеса при загрузке данных на Android"

Итак, видя, что этот ответ становится все более и более, я решил, что должен взять на себя ответственность за улучшение качества ответа. Когда я смотрю на оригинал, я не вижу реального «ответа» на вопрос «в чем проблема в моем коде?». Я оставляю оригинальный ответ неповрежденным ниже, чтобы сохранить связь, и это то, что я предполагаю, вызвало популярность ответов.

Обновленный ответ

Вероятно, вы нарушаете «модель с одним потоком». Android UI Toolkit не является потокобезопасным, и его следует обрабатывать только из основного потока пользовательского интерфейса. Android предлагает несколько полезных методов, которые вы можете использовать для обеспечения того, чтобы ваши пользовательские интерфейсы выполнялись в потоке пользовательского интерфейса. Большинство подробностей этих вызовов метода можно найти в блоге блога Android «Безболезненный поток» (связанный в слове «один» ниже, и здесь для быстрой справки).

Глядя на ваш код, я вижу, что я вижу, что создается ProgressDialog в том, что, вероятно, является потоком пользовательского интерфейса, который затем отклоняется во вновь созданной фоновом потоке.

Вам лучше было бы инкапсулировать ваш фоновый метод в Runnable и использовать View#post(Runnable) для выполнения работы в фоновом режиме.

Помните, что есть много способов сделать фон, так что взгляните на то, что доступно, и используйте то, что кажется правильным для вашей ситуации.

Оригинальный ответ

Взгляните на одно из многочисленных руководств о том, как выполнять асинхронную работу в Android .

Кроме того, вот некоторые другие вопросы StackOverflow, которые аналогичны

Проблема с диалоговым окном

Диалог прогресса по открытой деятельности

Диалог прогресса при запуске новой активности

Android: ускоритель Progress Dialog не вращается

Обновление диалогового окна прогресса

Android: показ диалога прогресса

 ProgressDialog dialog = new ProgressDialog(this); // this = YourActivity dialog.setProgressStyle(ProgressDialog.STYLE_SPINNER); dialog.setMessage("Loading. Please wait..."); dialog.setIndeterminate(true); dialog.setCanceledOnTouchOutside(false); dialog.show(); 

У меня возникла проблема переключения между двумя действиями: Activity A и Activity B. Активность B имела длительные задачи, которые обновляли пользовательский интерфейс, поэтому он не был кандидатом на AsyncTask. Я решил это, запустив диалог о ходе деятельности А и запустив операцию Б, прежде чем мы закончили первое действие. Код выглядит так:

  // wrap thread around original code for progress button final ProgressDialog ringProgressDialog = ProgressDialog.show(getActivity(), "Working", "Please Wait", true, false); ringProgressDialog.setIndeterminate(true); new Thread(new Runnable() { public void run() { try { Intent startNewActivityOpen = new Intent(getActivity(), ActivityB.class); startNewActivityOpen.setFlags(Intent.FLAG_ACTIVITY_PREVIOUS_IS_TOP); startActivity(startNewActivityOpen); GlobalVars.navigateFromScreen = true; Thread.sleep(3000); if (ringProgressDialog != null && ringProgressDialog.isShowing()) { ringProgressDialog.dismiss(); } getActivity().finish(); } catch (Exception e) { } } }).start();