1

我正在从呼叫日志中收集数据,将其放入数据库中,然后将它们查询到 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 查询之后和数据库查询之前。

4

1 回答 1

0

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

于 2012-06-05T12:51:47.270 回答