2012-01-25 96 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; 
        } 
    } 

是從我稱之爲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;