1
我正在從calllog收集數據,將其放入數據庫中,並將它們查詢到ListView中。 500次調用大約需要8秒鐘,這看起來很糟糕,所以我決定實施一個progressdialog來向用戶顯示剩下多少項目需要加載。 現在我正在嘗試3個項目(模擬器的calllog中有3個項目)。當進度對話結束時,列表視圖被填充3個項目,但是然後再次添加相同的3個項目以形成無限循環。Android - 使用列表視圖的progressdialog
我在填充表之前清空表,所以它總是有三條記錄。
可能是什麼問題?
pd = new ProgressDialog(Calllogs.this);
pd.setCancelable(true);
pd.setMessage("Loading...");
pd.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);
pd.setProgress(0);
pd.setMax(3);
pd.show();
//incrementProgressBy
new Thread(new Runnable() {
@Override
public void run() {
try
{
while(pd.getProgress()<=pd.getMax())
{
Thread.sleep(1000);
//collect data and populate database table
//query data and populate arrays
handler.sendMessage(handler.obtainMessage());
if(pd.getProgress()==pd.getMax())
{
pd.dismiss();
adapter = new ListViewCustomAdapter(Calllogs.this, arr_calllog_name, arr_calllog_phone, arr_calllog_type,arr_calllog_duration, arr_calllog_date);
lv1.post(new Runnable() {
public void run() {
lv1.setAdapter(adapter);
}});
}
}
}catch(Exception e){}
}
}).start();
而且處理程序:
private Handler handler = new Handler() {
@Override
public void handleMessage(Message msg) {
super.handleMessage(msg);
pd.incrementProgressBy(1);
//pd.dismiss();
}
};
編輯:我意外地發現,整個表的人口已經成爲一個死循環。我用sqlite數據庫瀏覽器檢查過表格,起初它有21個項目,在59秒後幾秒鐘,並且最終增長並強制關閉。
SOLUTION:
我簡直不敢相信我能不能看到這一點。線程從人口開始,並傳遞無限循環。我必須把它放在calllog查詢之後和數據庫查詢之前。
當您滾動或更改方向時是否顯示覆制的條目,或者只是他們繼續添加而沒有任何交互?它是在一段固定的時間之後發生還是像無限循環一樣? – Hassan
你是否實際增加了ProgressDialog中的進度(所以你不會進入無限的while循環)? – Luksprog