#android
#Android
Вопрос:
У меня небольшая проблема с AlertDialogs
моим приложением. Итак, вот моя ситуация :
У меня есть Synchronization Acitivity
, какой из них подключается к веб-сервису через HttpURLConnection
и анализирует результат из него в разных классах. Итак, если сервер отвечает на какую-то ошибку, у меня есть RPCErrorPacket
, которая будет обрабатывать это, но это не действие. Синтаксический анализ всего ответа выполняется за один thread
раз, и мне нужно найти способ создать AlertDialog
из RPCErrorPacket, который будет показан в Synchronization Activity
.
Любые идеи, если это возможно или как я могу добиться чего-то подобного?
Комментарии:
1. Использовали ли вы AsyncTask для доступа к веб-сервису
Ответ №1:
Если я правильно помню, считается плохой практикой, когда службы или другие фоновые задачи вызывают что-то, чего пользователь не может избежать. Поэтому я бы посоветовал вам подумать об использовании уведомления вместо этого. Там вы можете легко объявить, что должно произойти, если пользователь нажмет на него.
Если ваш поток на самом деле является рабочим для вашей активности, вам, вероятно, следует использовать один из методов, предлагаемых Android для выполнения асинхронных действий в фоновом режиме, например, AsyncTask.
Ответ №2:
Вот как я это делаю :
cancelDialog.dismiss(); // cancel the dialog which is already opened
Looper.prepare(); // preparing the looper
this.createDialog("Check your network settings!"); // creating the dialog with method
Looper.loop(); // loop
Looper.myLooper().quit(); // quit looper
Synchronization.this.finish(); // finish activity
Ответ №3:
runOnUiThread(new runnable{ run() { // выполните необходимые действия здесь . передайте контекст действия, если требуется . });
runOnUiThread — это метод, который запускает поток runnable в пользовательском интерфейсе из потока, отличного от пользовательского интерфейса.
Ответ №4:
это не очень хорошая практика, но вы можете сохранить статический экземпляр вашей активности в его конструкторе, а затем просто передать контекст из этого экземпляра в alertdailog в потоке пользовательского интерфейса, конечно runOnUiThread(new runnable ....)