AsyncTask publishProgress没有更新我的ProgressDialog

时间:2012-01-25 18:53:04

标签: android

我的实际任务已经完成,但是即使我调用了进度对话框,我的进度条的进度状态也没有任何增加..?有谁可以说我做错了? < / p>

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 个答案:

答案 0 :(得分:2)

你的整数数学被打破了。这条线

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

将始终产生0,因为整数除法仅截断整数部分。

要修复它,只需使用浮点数即可。具体做法是:

float dircnt=0;
float numberofdir=newfiles.length;