Создание потока для асинхронной загрузки XML для использования в элементах пользовательского интерфейса. - PullRequest
1 голос
/ 25 сентября 2010

Я создаю приложение, которое получает RSSFeed из одного места, анализирует его и отображает элементы в расширенном ListView.У меня это работает синхронно, но зависает при начальной загрузке.Я использовал ImageDownloader из блога Google для асинхронного захвата изображений для заполнения ListView, но как мне организовать потоковую загрузку, заставить обновление дисплея подождать, пока оно не будет сделано, прежде чем передавать RSS на адаптер, и отобразить диалоговое окно во время начальной загрузки?скачать?Я совершенно новичок в потоках и обработке сообщений!

Вот код в моем onCreate до сих пор:

    feedWait = new Handler() {

        public void handleMessage(Message msg) {
            Log.d(TAG, "made it to handler");
            UpdateDisplay();
        }
    };

    netThread.start();

А вот тема:

private Thread netThread = new Thread() {  
    public void run() {  

            getFeed();
            feedWait.handleMessage(new Message());
    }
};

Этовыдает ошибку, говоря, что я должен вызвать Looper.prepare () перед созданием обработчика, но если я выполняю Looper.prepare () в onCreate, он просто завершается неудачей.

1 Ответ

6 голосов
/ 25 сентября 2010

Вы должны использовать AsyncTask для этого. Например,

private class GetFeedTask extends AsyncTask<Void,Void,Boolean> {

    @Override
    public Boolean doInBackground(Void... params) {
       return getFeed();
    }

    private boolean getFeed() {
        //return true if successful, false if not
    }

    @Override
    public void onPostExecute(Boolean result) {
        if(result) //got feed successfully
            updateDisplay();
    }
}

Тогда в вашем onCreate() просто позвоните new GetFeedTask().execute();.

См. http://developer.android.com/reference/android/os/AsyncTask.html для документации.

...