创建一个线程以异步下载xml以便在UI元素中使用

Bri*_*ian 1 rss multithreading android asynchronous task

我正在创建一个应用程序,它从一个位置抓取RSSFeed,解析它,并在丰富的ListView中显示这些项目.我已经让它同步工作,但它挂起初始下载.我使用Google博客中的ImageDownloader异步抓取图像来填充ListView,但是我如何进行线程下载过程,使显示更新等到完成后再将RSS传递给适配器,并在初始化期间显示对话框下载?我对线程和消息处理完全不熟悉!

到目前为止,这是我的onCreate中的代码:

    feedWait = new Handler() {

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

    netThread.start();
Run Code Online (Sandbox Code Playgroud)

这是线程:

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

            getFeed();
            feedWait.handleMessage(new Message());
    }
};
Run Code Online (Sandbox Code Playgroud)

这会抛出一个错误,说我必须在创建一个处理程序之前调用Looper.prepare(),但如果我在onCreate中执行Looper.prepare(),它就会失败.

小智 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();
    }
}
Run Code Online (Sandbox Code Playgroud)

然后在你的onCreate()电话里new GetFeedTask().execute();.

有关文档,请参阅http://developer.android.com/reference/android/os/AsyncTask.html.