добавление значений textview в асинхронной задаче - PullRequest
0 голосов
/ 23 марта 2012

Теперь я делаю приложение для Android. В этом приложении я использую класс asynchtask для анализа данных json, и мне нужно установить эти значения в ui. Моя программа выглядит следующим образом.

class Activity
{
textview tv;
oncreate()
{
    setcontentview(layout);
    tv=(textview)findviewbyid(id);
    call to pageload()
}
class PageLoad extends AsyncTask<String, Void, Boolean>
{
    doInBackground()
    {
        json parsing
        tv.setText(data);
    }
}
}

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

Ответы [ 4 ]

2 голосов
/ 23 марта 2012

Вы также можете использовать onProgressUpdate() из AsyncTask

Вы можете вызвать его, используя publishProgress(values) из doInBackGround ().

И установите текст в вашем текстовом поле в onProgressUpdate ().

2 голосов
/ 23 марта 2012

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

  • onPreExecute() - до запуска doInBackground()
  • onPostExecute() - после запуска doInBackground() может получить результат работы, выполненной doInBackground ()

Вам нужно передать результат doInBackground() в onPostExecute(), где вы можете затем установить текст TextView.

Я бы предложил вам прочитать статью Google о том, как использовать Asynctask, которую можно найти по адресу http://developer.android.com/resources/articles/painless-threading.html, и взглянуть на класс AsyncTask .

Пример кода

private class MyAsynctask extends AsyncTask<String, Void, String> {

     protected String doInBackground(String... urls) {
         //do something heavy or resource intensive
         String data = resultOfSomeWork();
         return data;
     }

     protected void onPostExecute(String result) {
         myTextView.setText(result);
     }
 }
1 голос
/ 23 марта 2012

Вы не можете использовать поток пользовательского интерфейса в doInBack..() AsyncTask (как единственный рабочий поток). Используйте onPostExecute() для этого (если вы хотите внести какие-либо изменения, связанные с пользовательским интерфейсом, сделайте в onPreExecute() или onPostExecuted()).

Просто пройдите Android-AsyncTask и посмотрите, как это работает.

0 голосов
/ 23 марта 2012

Вы не можете обновить пользовательский интерфейс из потока AsyncTask, чаще всего это делается в основном потоке.Для этого вы можете использовать обработчик .

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