Android Asynctask EditText - PullRequest
       3

Android Asynctask EditText

1 голос
/ 21 декабря 2011

У меня есть фрагмент кода, который запрашивает мой веб-сервер xml, анализирует возвращаемые данные и заполняет текстовые поля в моем графическом интерфейсе соответствующими данными.До того, как у меня было это в моей функции oncreate и код работал нормально.Однако я хотел показать пользователю диалог загрузки, поэтому я переместил веб-сервер и операции синтаксического анализа XML в асинхронную задачу.Проблема возникает сейчас, когда я иду, чтобы заполнить мои текстовые поля GUI с моими проанализированными данными, и я получаю ошибку.Кто-нибудь может увидеть, что я делаю неправильно

new BackgroundAsyncTask().execute();   /// called from the oncreate function

, и мой код фоновой задачи выглядит следующим образом

  public class BackgroundAsyncTask extends
AsyncTask<Void, Integer, Void> {
int myProgress;

@Override
protected void onPostExecute(Void result) {
MyDialog.dismiss();
}

@Override
protected void onPreExecute() {
 MyDialog = ProgressDialog.show(attraction_more_info.this, " " , " Loading. Please wait ... ", true);

}

@Override
protected Void doInBackground(Void... params) {

              xml query and parse stuff on here ...


    // Populate page now

    TextView titlefield = (TextView) findViewById(R.id.att_title);
    TextView add1field = (TextView) findViewById(R.id.att_address1);
    TextView add2field = (TextView) findViewById(R.id.att_address2);
    TextView townfield = (TextView) findViewById(R.id.att_town);
    TextView postcodefield = (TextView) findViewById(R.id.att_postcode);
     TextView phonefield = (TextView) findViewById(R.id.att_phone);
     WebView webview = (WebView) findViewById(R.id.webview1);

              MY ERRORS START HERE
    titlefield.setText(attraction_name);
    add1field.setText(attraction_address1);
    add2field.setText(attraction_address2);
    townfield.setText(attraction_town);
    postcodefield.setText(attraction_postcode);
    phonefield.setText(attraction_phone);
    webview.loadData(attraction_description, "text/html", null);

return null;
}

@Override
protected void onProgressUpdate(Integer... values) {
}

}

Может кто-нибудь мне помочь?

Ответы [ 2 ]

4 голосов
/ 21 декабря 2011

Вы не можете обновить элементы пользовательского интерфейса из потока, не являющегося пользовательским интерфейсом.Попробуйте переместить все вызовы setText () и webview.loadData () в onPostExecute ()

, для этого вам нужно сохранить результаты запроса в объекте класса

0 голосов
/ 07 июня 2012

Попробуйте,

add1field.post(new Runnable() {
    public void run() {             
        add1field.setText(attraction_address1);
    }
}); 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...