Android-使用progressdialog和listview

Android-使用progressdialog和listview,android,calllog,Android,Calllog,我从调用日志中收集数据,将其放入数据库,并将其查询到ListView中。对于500个调用,大约需要8秒,这看起来很糟糕,因此我决定实现一个progressdialog,向用户显示还有多少项需要加载。 现在我尝试使用3个项目(emulator的调用日志中有3个项目)。当progressdialog完成时,listview将填充这3个项目,但随后相同的3个项目会一次又一次地添加,形成一个无休止的循环 我在填充表之前清空了它,所以它总是有三条记录 有什么问题吗 pd = new ProgressDia

我从调用日志中收集数据,将其放入数据库,并将其查询到ListView中。对于500个调用,大约需要8秒,这看起来很糟糕,因此我决定实现一个progressdialog,向用户显示还有多少项需要加载。 现在我尝试使用3个项目(emulator的调用日志中有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();
编辑:我意外地发现整个表填充已成为一个无止境的循环。我用sqlite数据库浏览器检查了这个表,最初它有21个条目,59个条目之后几秒钟,最后它不断增长并强制关闭

解决方案


真不敢相信我竟然看不到这一点。线程从人口开始,这导致了无休止的循环。我不得不把它放在calllog查询之后和数据库查询之前。

我真不敢相信我看不到这一点。线程从人口开始,这导致了无休止的循环。我必须把它放在calllog查询之后和数据库查询之前。

当你滚动或更改方向时,复制的条目会出现吗?还是只是它们不断地被添加而没有任何交互?它是在一个固定的时间间隔后发生的还是像一个无限循环一样发生的?您是否真的在
ProgressDialog
中增加了进度(这样您就不会在
循环时进入无限循环)?
 private Handler handler = new Handler() {
                        @Override
                        public void handleMessage(Message msg) {
                             super.handleMessage(msg);
                            pd.incrementProgressBy(1);    
                            //pd.dismiss();


                        }
                };