Android 在后台执行某些任务时显示的进程对话框不';t在任务完成后被取消

Android 在后台执行某些任务时显示的进程对话框不';t在任务完成后被取消,android,Android,当一项任务在后台执行时,我会显示一个流程对话框,问题是,它在完成工作后不会被取消/取消 这是我的AsyncTask类: public class FetchEmployeeAsyncTask extends AsyncTask<String, Void, ArrayList<Employee> > { private CaptureActivity activity; private ProgressDialog progressDialog; public Fet

当一项任务在后台执行时,我会显示一个流程对话框,问题是,它在完成工作后不会被取消/取消

这是我的AsyncTask类:

public class FetchEmployeeAsyncTask extends AsyncTask<String, Void, ArrayList<Employee> >   {

private CaptureActivity activity;
private ProgressDialog progressDialog;
public FetchEmployeeAsyncTask(CaptureActivity nextActivity) {
    this.activity = nextActivity;
}

@Override
protected ArrayList<Employee> doInBackground(String... url) {
    // TODO Auto-generated methoVoidd stub
    ArrayList<Employee> employees = null;
    for(String employeeUrl : url){
        employees = fetch(employeeUrl);
    }
    return employees;
}

private ArrayList<Employee> fetch(String url) {
    // TODO Auto-generated method stub
    ArrayList<Employee> employees = null;
    String response = null;
    try {
        DefaultHttpClient httpClient = new DefaultHttpClient();
        HttpGet httpGet = new HttpGet(url);

        HttpResponse httpResponse = httpClient.execute(httpGet);
        HttpEntity httpEntity = httpResponse.getEntity();
        response = EntityUtils.toString(httpEntity);
        employees = EmployeeXMLParser.employeeParser(response);
        System.out.println("Size in fetch "+employees.size());

        //System.out.println("Employee Name :: " + employees.get(0).getFirstName() + " " + employees.get(0).getLastName());
    } catch (UnsupportedEncodingException e) {
        e.printStackTrace();
    } catch (ClientProtocolException e) {
        e.printStackTrace();
    } catch (IOException e) {
        e.printStackTrace();
    } /*catch (XmlPullParserException e) {
        // TODO Auto-generated catch block
        System.out.println("Error parsing the response :: " + response);
        e.printStackTrace();
    }*/
    return employees;
}

@Override
protected void onPreExecute() {
    // TODO Auto-generated method stub
    super.onPreExecute();
    progressDialog = new ProgressDialog(activity);
    progressDialog.setCancelable(true);
    progressDialog.setTitle("Fetching Employees!!");
    progressDialog.setMessage("Please wait...");
    progressDialog.setProgressStyle(ProgressDialog.STYLE_SPINNER);
    progressDialog.setProgress(0);
    progressDialog.show();
}

@Override
public void onPostExecute(ArrayList<Employee> employees){
    super.onPostExecute(employees);

    System.out.println("in post execxute "+employees.size());
    progressDialog.dismiss();
    activity.showEmployees(employees);


}
}
公共类FetchEmployeeAsyncTask扩展了AsyncTask{
私人捕获活动;
私有进程对话;
公共FetchEmployeeAsyncTask(CaptureActivity nextActivity){
这个。活动=下一个触觉;
}
@凌驾
受保护的ArrayList doInBackground(字符串…url){
//TODO自动生成的无效存根
ArrayList employees=null;
for(字符串employeeUrl:url){
employeeUrl=fetch(employeeUrl);
}
返回员工;
}
私有ArrayList获取(字符串url){
//TODO自动生成的方法存根
ArrayList employees=null;
字符串响应=null;
试一试{
DefaultHttpClient httpClient=新的DefaultHttpClient();
HttpGet HttpGet=新的HttpGet(url);
HttpResponse HttpResponse=httpClient.execute(httpGet);
HttpEntity HttpEntity=httpResponse.getEntity();
response=EntityUtils.toString(httpEntity);
EmployeeXMLParser.employeeParser(响应);
System.out.println(“提取中的大小”+employees.Size());
//System.out.println(“员工姓名::”+employees.get(0.getFirstName()+”+employees.get(0.getLastName());
}捕获(不支持的编码异常e){
e、 printStackTrace();
}捕获(客户端协议例外e){
e、 printStackTrace();
}捕获(IOE异常){
e、 printStackTrace();
}/*捕获(XMLPullParseRexE){
//TODO自动生成的捕捉块
System.out.println(“解析响应时出错::”+响应);
e、 printStackTrace();
}*/
返回员工;
}
@凌驾
受保护的void onPreExecute(){
//TODO自动生成的方法存根
super.onPreExecute();
progressDialog=新建progressDialog(活动);
progressDialog.setCancelable(真);
progressDialog.setTitle(“获取员工!!”;
progressDialog.setMessage(“请稍候…”);
progressDialog.setProgressStyle(progressDialog.STYLE_微调器);
progressDialog.setProgress(0);
progressDialog.show();
}
@凌驾
public void onPostExecute(ArrayList员工){
super.onPostExecute(员工);
System.out.println(“在执行后”+employees.size());
progressDialog.disclose();
活动。展示员工(员工);
}
}
正在从活动类调用此类。 这是我的活动课:

public class CaptureActivity extends Activity {

private String url = "";

FetchEmployeeAsyncTask employeeAsyncTask = new FetchEmployeeAsyncTask(this);
SelectedEmployeeAsyncTask selectedEmployeeAsyncTask = new SelectedEmployeeAsyncTask(this);
private ArrayList<Employee> employees = null;

@Override
protected void onCreate(Bundle savedInstanceState) {

    super.onCreate(savedInstanceState);

    employeeAsyncTask.execute(new String[] {url});

    System.out.println("Status "+employeeAsyncTask.getStatus());

    setContentView(R.layout.activity_capture);

}

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    // Inflate the menu; this adds items to the action bar if it is present.
    getMenuInflater().inflate(R.menu.activity_capture, menu);
    return true;
}



public void showEmployees(ArrayList<Employee> employees) {
    // TODO Auto-generated method stub
    System.out.println("Status 2  "+employeeAsyncTask.getStatus());
    TableLayout employeeTable = (TableLayout) findViewById(R.id.main_table);

    TableRow header = new TableRow(this);
    header.setId(100);
    header.setBackgroundColor(Color.rgb(255, 165, 0));
    //header.setLayoutParams(new LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT));

    TextView empCodeHeader = new TextView(this);
    empCodeHeader.setId(200);
    empCodeHeader.setText("Employee Code");
    empCodeHeader.setTextSize(16);
    empCodeHeader.setPadding(2,2,2,2);
    empCodeHeader.setWidth(200);
    header.addView(empCodeHeader);

    TextView empNameHeader = new TextView(this);
    empNameHeader.setId(201);
    empNameHeader.setText("Employee Name");
    empNameHeader.setTextSize(16);
    empNameHeader.setPadding(2,2,2,2);
    empNameHeader.setWidth(300);
    header.addView(empNameHeader);}
公共类CaptureActivity扩展活动{
私有字符串url=“”;
FetchEmployeeAsyncTask employeeAsyncTask=新的FetchEmployeeAsyncTask(此任务);
SelectedEmployeeAsyncTask SelectedEmployeeAsyncTask=新建SelectedEmployeeAsyncTask(此);
private ArrayList employees=null;
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
execute(新字符串[]{url});
System.out.println(“状态”+employeeAsyncTask.getStatus());
setContentView(R.layout.activity\u捕获);
}
@凌驾
公共布尔onCreateOptions菜单(菜单){
//为菜单充气;这会将项目添加到操作栏(如果存在)。
getMenuInflater().充气(R.menu.activity\u捕获,菜单);
返回true;
}
公开作废员工(ArrayList员工){
//TODO自动生成的方法存根
System.out.println(“状态2”+employeeAsyncTask.getStatus());
TableLayout employeeTable=(TableLayout)findViewById(R.id.main_表);
TableRow header=新的TableRow(此);
标题.setId(100);
header.setBackgroundColor(Color.rgb(255,165,0));
//header.setLayoutParams(新的LayoutParams(LayoutParams.MATCH_父级,LayoutParams.MATCH_父级));
TextView empCodeHeader=新的TextView(此);
empCodeHeader.setId(200);
empCodeHeader.setText(“员工代码”);
empCodeHeader.setTextSize(16);
empCodeHeader.setPadding(2,2,2,2);
empCodeHeader.setWidth(200);
header.addView(empCodeHeader);
TextView empNameHeader=新的TextView(此);
empNameHeader.setId(201);
empNameHeader.setText(“员工姓名”);
empNameHeader.setTextSize(16);
empNameHeader.setPadding(2,2,2,2);
empNameHeader.setWidth(300);
header.addView(empNameHeader);}

将CaptureActivity代码更改为:

    public class CaptureActivity extends Activity {

    private String url = "";

    FetchEmployeeAsyncTask employeeAsyncTask ;
    SelectedEmployeeAsyncTask selectedEmployeeAsyncTask;
    private ArrayList<Employee> employees = null;

    @Override
    protected void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);
       setContentView(R.layout.activity_capture);  //<< call here setContentView

       employeeAsyncTask = new FetchEmployeeAsyncTask(this);
       selectedEmployeeAsyncTask = new SelectedEmployeeAsyncTask(this);

       employeeAsyncTask.execute(new String[] {url});

        System.out.println("Status "+employeeAsyncTask.getStatus());


    }
   // your code here...
公共类CaptureActivity扩展活动{
私有字符串url=“”;
FetchEmployeeAsyncTask employeeAsyncTask;
SelectedEmployeeAsyncTask SelectedEmployeeAsyncTask;
private ArrayList employees=null;
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);

setContentView(R.layout.activity_capture);//您是如何从activity启动AsyncTask的?您是如何启动它的?您正在调用get()方法?添加了我的activity类的一部分。@AnilM:按照我的回答进行更改后再试一次。@AnilM