我正在使用以下代码
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不适用于应用程序
答案 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();