2010-09-24 3 views
1

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

Вот код в моем 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, это просто не удастся.

ответ

6

Для этого вам необходимо использовать 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 для документации.

+0

О, спасибо за ответ. Я думаю, что я собираюсь построить асинхронный класс для очереди и обработать эти http-запросы для моего проекта. Тем временем, однако, мне удалось заставить его работать через простой класс Thread и Handler. Я сейчас все читаю! Спасибо за ответ! – Brian