我的实际任务已经完成,但是即使我调用了进度对话框,我的进度条的进度状态也没有任何增加..?有谁可以说我做错了? < / 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);
}
答案 0 :(得分:2)
你的整数数学被打破了。这条线
progress=(int)((dircnt/numberofdir)*100);
将始终产生0
,因为整数除法仅截断整数部分。
要修复它,只需使用浮点数即可。具体做法是:
float dircnt=0;
float numberofdir=newfiles.length;