2012-04-20 71 views
0

我试图显示一个进度对话框,同时从web上填充信息,填充从中创建ListView的sqlite数据库。我创建了一个异步类,在下载信息时显示进度对话框,但在此之后,列表视图为空。这可能是因为在异步之前已经加载了listview。那么,如何重新加载列表视图或以正确的方式进行操作呢?以下是我迄今为止(留出了后台处理,因为它太长时间displag):Android:从数据库异步填充后从数据库中加载列表视图

private class DownloadInfo extends AsyncTask <Void, Void, Void>{ 
    //////////////////Open Dialog before execution /////////// 
private ProgressDialog dialog; 
    protected void onPreExecute(){ 
     dialog = new ProgressDialog(CandidatesList.this); 
     dialog.setMessage("Loading Candidates from Webserver"); 
     dialog.setIndeterminate(true); 
     dialog.setCancelable(false); 
     dialog.show(); 
    } 
    ///////////////Background Processing////////////////// 
    @Override 
    protected Void doInBackground(Void... dbArray) { 
    ////Load information from webserver and put it in sqlite/// 
     return null; 

    } 

    ///////After the processing is done ////////////// 
    protected void onPostExecute(Void unused) { 
     dialog.dismiss(); 
    } 

} 

而上创建如下:

DownloadInfo task = new DownloadInfo(); 
    task.execute(); 
Cursor c = db.getAllCandidates(); 
    candidates = new String[c.getCount()]; 
    if (c.moveToFirst()) { 
     int i = 0; 
     do { 
      candidates[i] = c.getString(1);// insert Name into candidate 
              // Array 
      i++; 
     } while (c.moveToNext()); 
    } 
    setListAdapter(new ArrayAdapter<String>(this, R.layout.list_item, 
      candidates)); 

请帮帮忙, 谢谢

回答

1

如果您想要将数据库中的游标信息自动加载到ListView中,请为您的ListView使用SimpleCursorAdapter。 (您可能需要在Async完成后调用notifyDataSetChanged()。)

+0

在postExecute中调用notifyDataSetChanged()?而在什么? notifyDataSetChanged()是SimpleCursorAdapter的继承方法。 – Diaa 2012-04-20 19:37:47

+0

一种解决方案是将您的AsyncTask传递给您的适配器,并且在postExecute()中调用notifyDataSetChanged()。 – Sam 2012-04-20 19:50:31