我正在从呼叫日志中收集数据,将其放入数据库中,然后将它们查询到 ListView 中。500 次调用大约需要 8 秒,这看起来很糟糕,所以我决定实现一个进度对话框来向用户显示还有多少项需要加载。现在我正在尝试 3 个项目(模拟器的呼叫日志中有 3 个项目)。当progressdialog 完成时,listview 会填充3 个项目,但随后会一次又一次地添加相同的3 个项目,从而形成无限循环。
我在填充之前清空了表,所以它总是有三个记录。
可能是什么问题?
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 之后几秒钟,最后增长并强制关闭。
解决方案:
我不敢相信我看不到这个。线程从人口开始,导致无限循环。我必须把它放在 calllog 查询之后和数据库查询之前。