2012-05-27 3 views
1

나는 콜 로그에서 데이터를 수집하여 데이터베이스에 저장하고 ListView에 쿼리합니다. 500 회를 호출하면 약 8 초가 걸려서 나빠 보이므로 진행중인 대화 상자를 구현하여 사용자에게 얼마나 많은 항목이로드 될지 알려줍니다. 이제 3 개의 항목으로 시도하고 있습니다 (에뮬레이터의 콜 로그에는 3 개의 항목이 있습니다). progressdialog가 완료되면 listview에 3 개의 항목이 채워지지만 동일한 3 개의 항목이 반복되고 무한 반복됩니다.안드로이드 - listview와 함께 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 초 후 몇 초가 지나서 마침내 확장 및 강제 종료되었습니다.

해결 : 나는이 볼 수없는 믿을 수 없어

. 쓰레드는 인구와 함께 시작되었고 끝없는 반복을 보냈습니다. calllog 쿼리 이후와 데이터베이스 쿼리 전에 넣어야했습니다.

+0

방향을 스크롤하거나 변경할 때 복제 된 항목이 나타나거나 그냥 상호 작용없이 계속 추가 될 수 있습니까? 그리고 고정 된 시간 간격 후에 또는 무한 루프처럼 발생합니까? – Hassan

+0

실제로 'ProgressDialog'의 진행을 증가시켜 줍니까 (그래서 당신은 무한한'while' 루프에 들어 가지 않습니다)? – Luksprog

답변

0

나는 이것을 볼 수 없다고 나는 믿을 수 없다. 쓰레드는 인구와 함께 시작되었고 끝없는 반복을 보냈습니다. calllog 쿼리 이후와 데이터베이스 쿼리 전에 넣어야했습니다.