Android异步任务未加载

时间:2012-03-29 12:49:41

标签: android

我正在使用以下代码

class AddTask extends AsyncTask<Void, Void, Void>
     {      
        ProgressDialog dialog;
    protected void onPreExecute() 
    {      
     dialog = new ProgressDialog(getApplicationContext());         
    dialog.setMessage("Loading"); 
    dialog.setIndeterminate(true);         
    dialog.setCancelable(false);      
    dialog.show();

      }     
     protected Void doInBackground(Void... unused) 
    {     

//task
return(null);  


    }     

      protected void onPostExecute(Void unused)
     {     
        dialog.dismiss();    
     }  

     }

我是从这里打电话的

public void onCreate(Bundle savedInstanceState) 
    {
        super.onCreate(savedInstanceState);
        new AddTask.execute();
}

logcat的

03-29 18:16:06.434:E / AndroidRuntime(1246):引起:android.view.WindowManager $ BadTokenException:无法添加窗口 - 令牌null不适用于应用程序

3 个答案:

答案 0 :(得分:2)

我认为由于这条线而你得到了例外

 dialog = new ProgressDialog(getApplicationContext());   

使用代替getApplicationContext(),或者您也可以使用 YourActivity.this 来解决此问题。

答案 1 :(得分:2)

您应该将活动附加到您的asynk任务,例如:

AddTask(Activity activity){  
    mActivity  = activity;  
}   
protected void onPreExecute()   
{        
    dialog = new ProgressDialog(mActivity);           
    dialog.setMessage("Loading");   
    dialog.setIndeterminate(true);           
    dialog.setCancelable(false);        
    dialog.show();  
}    
protected void onPostExecute(Void unused)  
{  
    if(mActivity != null)       
        dialog.dismiss();      
}   
public void unbind(){  
    mActivity = null;  
}  

并在活动的onDestroy中调用unbind

答案 2 :(得分:1)

无法使用getApplicationContext()获取上下文,并且必须使用Activity,所以要解决以下问题

dialog = new ProgressDialog(YourActivity.this);         
dialog.setMessage("Loading"); 
dialog.setIndeterminate(true);         
dialog.setCancelable(false);      
dialog.show();