Android - использование progressdialog со списком просмотра

1

Я собираю данные из calllog, помещая их в базу данных и запрашивая их в ListView. С 500 вызовами требуется около 8 секунд, что выглядит плохо, поэтому я решил реализовать progressdialog, чтобы показать пользователю, сколько элементов осталось загрузить. Теперь я пытаюсь использовать 3 элемента (есть 3 элемента в calllog эмулятора). Когда progressdialog заканчивается, listview заполняется тремя элементами, но затем те же 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();


                        }
                };

EDIT: я случайно узнал, что вся таблица населения стала бесконечной петлей. Я проверил таблицу с помощью браузера базы данных sqlite, и сначала у него было 21 элемент, через пару секунд после 59, и он увеличился и, наконец, закрылся.

РЕШЕНИЕ:

Я не могу поверить, что не видел этого. Нить началась с населения, и это привело к бесконечному циклу. Я должен был поставить его после запроса calllog и перед запросом базы данных.

  • 0
    Появляются ли реплицированные записи, когда вы прокручиваете или меняете ориентацию, или они продолжают добавляться без какого-либо взаимодействия? И происходит ли это через фиксированный промежуток времени или как бесконечный цикл?
  • 0
    Вы на самом деле увеличиваете прогресс в ProgressDialog (так что вы не входите в бесконечном во while цикла)?
Теги:
calllog

1 ответ

0
Лучший ответ

Я не могу поверить, что не видел этого. Нить началась с населения, и это привело к бесконечному циклу. Я должен был поставить его после запроса calllog и перед запросом базы данных.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню