Intereting Posts
Отключение кнопки отправки клавиатуры, когда ничего не было введено Есть ли степень магистра в области разработки мобильных приложений, таких как android? MQTT против XMPP, который я должен выбрать? Построение WifiConfiguration из ScanResult или: Интерпретация возможностей «ScanResult» String Создание пользовательского информационного окна на картах Google V2 Как вернуться к стилю по умолчанию в EditText, если применить фон? Динамическое использование RelativeLayout и установка полей в px, dp, inch, mm Как использовать Android aaptOptions? Как проверить существование файла в телефонном справочнике с телефонной связью Ошибка: ожидания ожидания для блокировки кеша класса buildscript для файла сборки при изменении minSdkVersion Android: После создания источника платформы, как подписать произвольный APK с ключом платформы? Модифицировать пример 2, но ошибка дисплея GsonConverterFactory «Не удается разрешить символ» Android: Как вы переходите к другому действию при нажатии? Как отобразить AlertDialog в фрагменте? Медиа-сканер для Android: как удалить файлы?

Показать диалог вращающегося колеса при загрузке данных на 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();