2013-07-11 67 views
3

请帮忙,AsyncTask完成后我无法关闭ProgressDialog。我搜索了答案,但没有发现。 当我使用线程而不是AsyncTask时,此代码正常工作。 有什么想法吗?AsyncTask完成后无法关闭ProgressDialog

Context appContext; 
ProgressDialog pd; 

@Override 
public void onCreate(Bundle savedInstanceState) 
{ 
    super.onCreate(savedInstanceState); 
    appContext=this; 
    MyTask myTask=new MyTask(); 
    myTask.execute(); 
} 


class MyTask extends AsyncTask<Void, Void, Void> 
{ 
    @Override 
    protected void onPreExecute() 
    { 
     pd = ProgressDialog.show(appContext, "Wait..", "Loading data", 
        true, false); 
    pd.setCancelable(false); 
     super.onPreExecute(); 
    } 

    @Override 
    protected Void doInBackground(Void... arg0) 
    { 
    //something 
    return null; 
    } 

    @Override 
    protected void onPostExecute(Void result) 
    { 
     if (pd!=null) 
     pd.dismiss(); 
    super.onPostExecute(result); 
    } 
} 
+0

- 只是为了清楚起见...您将您的Context对象命名为“appContext”。这实际上是您的Activity的上下文,而不是您的应用程序的上下文。这是Android世界中两个完全不同的东西。 – dell116

回答

8
private ProgressDialog progressDialog; // class variable  

    private void showProgressDialog(String title, String message) 
    { 
     progressDialog = new ProgressDialog(this); 

     progressDialog.setTitle(title); //title 

     progressDialog.setMessage(message); // message 

     progressDialog.setCancelable(false); 

     progressDialog.show(); 
    }   

onPreExecute()

​​

检查并关闭onPostExecute() -

protected void onPostExecute() 
    { 
     if(progressDialog != null && progressDialog.isShowing()) 
     { 
      progressDialog.dismiss(); 
     } 
    } 
+0

好人... –

0

试试这个

 private Context context; 
     private ProgressDialog dialog; 
    public LastStageTask(Context cxt) { 
     context = cxt; 

     dialog = new ProgressDialog(context); 
    } 

    @Override 
    protected void onPostExecute(String result) { 
     dialog.dismiss(); 
}