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