2012-04-20 7 views
0

Webから情報を読み込んで、Listviewが作成されたsqliteデータベースにデータを読み込む際に、進行状況ダイアログを表示しようとしています。情報がダウンロードされている間に進捗ダイアログボックスを表示する非同期クラスを作成しましたが、その後にリストビューは空です。リストビューは既に非同期の前にロードされている可能性があります。だから私はリストビューをリロードするか、これを正しい方法で行いますか?ここで私はこれまでのところ(それは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を使用します。 (非同期終了後にnotifyDataSetChanged()を呼び出す必要があるかもしれません)

+0

postExecuteのnotifyDataSetChanged()を呼び出しますか?そして何? – Diaa

+0

notifyDataSetChanged()は継承されたSimpleCursorAdapterのメソッドです。 1つの解決策は、あなたのAsyncTaskをアダプタに渡し、そうであれば、postExecute()のnotifyDataSetChanged()を呼び出します。 – Sam

関連する問題