Android - 使用progressdialog和listview

时间:2012-05-27 13:09:49

标签: android calllog

我从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查询之后和数据库查询之前把它放到。

1 个答案:

答案 0 :(得分:0)

我无法相信我看不到这一点。线程始于人口,并且无休止地循环。我必须在calllog查询之后和数据库查询之前把它放到。