Нужна помощь с AsyncTasks - приложение для Android - PullRequest
0 голосов
/ 28 марта 2011

Эй, у меня есть приложение, которое подключается к нескольким сайтам с использованием defaulthttpclient, и я обнаружил, что мне нужно использовать AsyncTask, поскольку запросы задерживают поток пользовательского интерфейса.В моем коде я создаю экземпляр класса состояний, т.е. State state = new O2State ();с разными состояниями для разных сайтов.

Затем я вызываю state.logon (String username, String password);которая возвращает строку, содержащую детали результата, так:

String result = state.logon(username, password);

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

Я смотрел на этот пример:

public void onClick(View v) {
new DownloadImageTask().execute("http://example.com/image.png");
}

private class DownloadImageTask extends AsyncTask {
     protected Bitmap doInBackground(String... urls) {
         return loadImageFromNetwork(urls[0]);
     }

     protected void onPostExecute(Bitmap result) {
         mImageView.setImageBitmap(result);
     }
 }

Я застрял: я не думаю, что мне понадобятся какие-либо аргументы, но doinbackground, кажется, требует списокпараметров.Мне также незнакомо это время объявления аргументов метода.

Во-вторых: я не уверен, как вернуть полученную строку, когда поток завершит выполнение.Должен ли я просто создать «DoThisWhenTheThreadIsFinished (String result)» и вызвать его из onPostExecute?

В любом случае, я надеюсь, что это не слишком запутанно для чтения, и я очень признателен за любую помощь, которую вы можете предложить.Спасибо

1 Ответ

1 голос
/ 28 марта 2011

Если вам не нужны параметры, просто укажите тип (например, String) и игнорируйте его, или вы можете использовать класс Void (обратите внимание на заглавную V).

То, что вы предлагаете для возврата управления потоку пользовательского интерфейса, чтобы отразить обновление, является хорошим подходом. то есть в onPostExecute () вызовите метод для действия для обновления пользовательского интерфейса.

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

(когда люди отвечают на ваши вопросы, всегда оценивайте те, которые вам нравятся, и выбирайте один как «лучший» ответ. Вы получаете очки, делая это, и это помогает другим позже).

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