Android - Как передать значение edittext в фоновый процесс, а затем начать новое действие после завершения - PullRequest
1 голос
/ 17 июня 2011

У меня появляется диалоговое окно с предупреждением, которое позволяет человеку ввести пароль, а затем выбрать его либо отправить, либо отменить (как обычно, положительные и отрицательные кнопки).В настоящее время, когда они нажимают кнопку «Вход» (выбор почтового ящика), он просто отправляет их на следующую страницу независимо от того, что они вводят.(Код вставлен ниже).

Что мне нужно, чтобы помочь в изменении, так это то, что я хочу, чтобы пароль, полученный из текста редактирования, фактически передавался в операцию, которая расшифровывает XML-файл, который находится в папке ресурсов.Полученный пароль является ключом к шифрованию.Может ли кто-нибудь предложить мне некоторую помощь относительно того, как изменить мой код так:

а) захватить пароль и отправить его в механизм дешифрования (я думаю, это будет сделано с помощью onActivityResult?) Б) выполнить дешифрование вфон (я думаю, с индикатором выполнения или загрузчиком? Я ДЕЙСТВИТЕЛЬНО новичок с многопоточностью в Android) c) после расшифровки xml, ТО переходит к новому действию, где мой код может читать дешифрованный xml, находящийся сейчас в памяти.

Любая помощь приветствуется !!

.setPositiveButton ("Login", new DialogInterface.OnClickListener () {public void onClick (диалог DialogInterface, int whichButton) {

                        Intent openBrowsePage = new Intent();
                        openBrowsePage .setClassName("com.myproject.android", "com.myproject.android.BrowsePage");
                        startActivity(openBrowsePage );

                    }
                })

Ответы [ 2 ]

1 голос
/ 17 июня 2011

Это классическая работа для AsyncTask.из документации :

AsyncTask позволяет правильно и легко использовать поток пользовательского интерфейса.Этот класс позволяет выполнять фоновые операции и публиковать результаты в потоке пользовательского интерфейса без необходимости манипулировать потоками и / или обработчиками.

Для этого вам не понадобится другое действие или служба.

В документации Asynctask есть некоторый пример кода, но вкратце вы бы унаследовали от AsyncTask и переопределили бы метод doInBackground для выполнения фоновых операций (гарантированно выполняемых в фоновом потоке).Вы также можете вызвать publishProgress из этого метода, чтобы указать, что вы продвинулись в фоновой операции.Затем вы вернете результат вычисления из этого метода (в вашем случае это буфер XML).

Возможно, вы захотите переопределить OnProgressUpdate и соответственно обновить ProgressBar.Этот метод будет выполняться в потоке пользовательского интерфейса в ответ на ваши publishProgress фоновые вызовы метода.

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

Обратите внимание, что этот API доступен для уровня 3 (Android 1.5) и выше.

0 голосов
/ 17 июня 2011

Вы должны использовать Сервис вместо активности для выполнения фоновых задач. Вы можете передать пароль, полученный от EditText, в Службу в качестве дополнительного в Намерении, которое вы используете для запуска Службы.

Самый простой способ сделать это - расширить IntentService и выполнить там расшифровку. Позвоните в службу в вашем слушателе кнопки, используя startService . По окончании шифрования вызовите новое действие, используя startActivity.

РЕДАКТИРОВАТЬ: Я должен уточнить мой ответ. Рори прав - AsyncTask следует использовать для фоновых задач в Activity. Способ определения того, должна ли фоновая задача использовать AsyncTask или Service, должен зависеть от того, должна ли задача выполняться при выходе из операции. Например, если я начинаю загрузку файла в фоновом режиме своей Активности и хочу, чтобы загрузка продолжалась даже после выхода из Активности, вам следует использовать Сервис. С другой стороны, если это фоновая задача опубликовать текущий уровень сигнала Wi-Fi, который будет отображаться в вашей активности, используйте AsyncTask.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...