2012-05-27 33 views
1

我正在從calllog收集數據,將其放入數據庫中,並將它們查詢到ListView中。 500次調用大約需要8秒鐘,這看起來很糟糕,所以我決定實施一個progressdialog來向用戶顯示剩下多少項目需要加載。 現在我正在嘗試3個項目(模擬器的calllog中有3個項目)。當進度對話結束時,列表視圖被填充3個項目,但是然後再次添加相同的3個項目以形成無限循環。Android - 使用列表視圖的progressdialog

我在填充表之前清空表,所以它總是有三條記錄。

可能是什麼問題?

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秒後幾秒鐘,並且最終增長並強制關閉。

SOLUTION

我簡直不敢相信我能不能看到這一點。線程從人口開始,並傳遞無限循環。我必須把它放在calllog查詢之後和數據庫查詢之前。

+0

當您滾動或更改方向時是否顯示覆制的條目,或者只是他們繼續添加而沒有任何交互?它是在一段固定的時間之後發生還是像無限循環一樣? – Hassan

+0

你是否實際增加了ProgressDialog中的進度(所以你不會進入無限的while循環)? – Luksprog

回答

0

我不敢相信我看不到這個。線程從人口開始,並傳遞無限循環。我必須把它放在calllog查詢之後和數據庫查詢之前。