我从calllog收集数据,将其放入数据库,并将它们查询到ListView中。 500次调用需要大约8秒,看起来很糟糕,所以我决定实现一个progressdialog来向用户显示剩余的项目数量。 现在我尝试使用3个项目(模拟器的calllog中有3个项目)。当progressdialog结束时,列表视图将填充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查询之后和数据库查询之前把它放到。
答案 0 :(得分:0)
我无法相信我看不到这一点。线程始于人口,并且无休止地循环。我必须在calllog查询之后和数据库查询之前把它放到。