2012-01-25 2 views
2

실제 작업이 완료되고 있지만 진행률 대화 상자를 호출해도 진행률 상태가 향상되지 않습니다 ... 누군가 내가 잘못했는지 말할 수 있습니까?AsyncTask publishProgress가 내 ProgressDialog를 업데이트하지 않습니다

class A extends AsyncTask<File[],Integer,Void> 
       { 
        private Context cnt; 
         int count=0; 
        @Override 
        protected void onPreExecute() { 
         pd = new ProgressDialog(cnt); 
          pd.setMessage("Matching progress"); 
          pd.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL); 
          pd.setMax(100); 
          pd.setCancelable(false); 
          pd.setProgress(0); 
          pd.show(); 
        } 
        A(Context context) 
        { 
         cnt=context; 
        } 

        protected Void doInBackground(File[]... params) { 
         // TODO Auto-generated method stub 
         File[] newfiles=params[0]; 
         File[] temp=null; 
         int progress=0; 
         int dircnt=0; 
         int numberofdir=newfiles.length; 
         for(File b:newfiles) 
         { 


          count=0; 
          dirname=b.getName(); 
          if(b.isDirectory()) 
          { 

           temp=b.listFiles(); 
          } 
          for(File a:temp) 
          { 
           gest=dotask.batchprocess(a.getPath()); 
           if(gest!=null) 
            System.out.println("success"); 
           String name=dirname+"_"+count; 
           saveGesture(name, gest); 
           count++; 

          } 
          dircnt++; 
          progress=(int)((dircnt/numberofdir)*100); 
          publishProgress(progress); 


         } 


         return null; 
        } 
        @Override 
        protected void onProgressUpdate(Integer... values) { 
         // increment progress bar by progress value 
         pd.setProgress(values[0]); 


       } 
        protected void onPostExecute() { 
         pd.hide(); 
         pd=null; 
        } 
    } 

아래 I는 AsyncClass 호출되는 방법이다.

public void addgestures() 
    { 
       cView.postInvalidate(); 
       dotask.setH(cView.getH()); 
       dotask.setW(cView.getW()); 

       count=0; 
       files=null; 
       /*if(dir.isDirectory()) 
       { 
        files=dir.listFiles(); 
       }*/ 
       files=dir.listFiles(); 
       for(int i=0;i<files.length;i++) 
       { 
        System.out.println(files[i].getPath()); 
       } 




       A a=new A(this); 
       a.execute(files); 



      } 

답변

1

정수 계산이 깨졌습니다. 선은

progress=(int)((dircnt/numberofdir)*100); 

항상 얻을 것 0는 정수 나누기는 정수 부분에 잘라 때문이다.

문제를 해결하려면 대신 수레를 사용하십시오. 구체적으로 :

float dircnt=0; 
float numberofdir=newfiles.length; 
관련 문제