Использование AsyncTask для обновления моего пользовательского интерфейса (Android) - PullRequest
0 голосов
/ 28 апреля 2011

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

class UpdaterThread extends AsyncTask<Void, String, Void> {

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

        try {
            URL url = new URL(
                    "http://www.google.com/ig/api?weather=Cardiff");

            SAXParserFactory spf = SAXParserFactory.newInstance();
            SAXParser sp = spf.newSAXParser();

            XMLReader xr = sp.getXMLReader();
            WeatherHandler myWeatherHandler = new WeatherHandler();
            xr.setContentHandler(myWeatherHandler);

            xr.parse(new InputSource(url.openStream()));

        }

        catch (Exception e) {

        }

        return null;
    }

    @Override
    protected void onPostExecute(Void result) {
        super.onPostExecute(result);
        SetWeather mySetWeather = new SetWeather();
        temp.setText(mySetWeather.getTemp());
        wind.setText(mySetWeather.getWind());
        humidity.setText(mySetWeather.getHumidity());
    }

}

Я также использую метод .execute () в своем основном классе, чтобы запустить его.

Ответы [ 4 ]

0 голосов
/ 23 июля 2012

Можно ли одновременно обновлять два интерфейса при плавном получении прогресса?Иногда это приводит к крайне плохой производительности с точки зрения скорости загрузки, а обработчик уведомлений пользовательского интерфейса не отвечает, если только не добавлена ​​thread.sleep ();

0 голосов
/ 28 апреля 2011

Первый:

SetWeather mySetWeather = new SetWeather();
        temp.setText(mySetWeather.getTemp());

Где вы добавляете разобранную информацию к новому объекту, созданному выше?

Что такое temp?Где это определено?

Во-вторых, лично я предпочитаю обратный вызов операции, отправляющей новый объект, а затем в операции изменяю пользовательский интерфейс, но это личное предпочтение.

0 голосов
/ 28 апреля 2011

Я сразу заметил две вещи, которые могут быть неправильными или не такими, как вы предполагали:

  1. Обычно вы хотите вернуть значение, полученное из doInBackground(), для использования в onPostExecute(),но вы возвращаете нуль, который затем передается как результат.Это то, что вы хотите?
  2. Исходя из этого вопроса, вам нужно изменить типы AsyncTask на более подходящие.Поскольку вы просто возвращаете null, установка второго типа на String пока работает, но если вы возвращаете новое значение, вам необходимо обновить этот тип.Второй тип, вероятно, в любом случае должен быть Void, так как это соглашение для неиспользуемых типов (поскольку вы не реализуете onProgressUpdate()).

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

0 голосов
/ 28 апреля 2011

Два по цене одного: вопрос AsyncTask на Android-анализ AsyncTask xml дает некоторый контекст для синтаксического анализа XML с использованием AsyncTask.

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