【问题标题】:window manager bad token exception android窗口管理器坏令牌异常android
【发布时间】:2014-02-26 07:21:37
【问题描述】:

在我的应用程序中,我使用了带有 3 个标签的 tabhost,当我按下后退按钮时,我得到了 WindowManager.BadTokenException 我尝试了很多东西,但无法解决。

这是我的活动后台任务:

class MyTask extends AsyncTask<String, Void, String> {

    ProgressDialog pDialog;

    @Override
    protected void onPreExecute() {
        super.onPreExecute();


        pDialog = new ProgressDialog(activity);
    //  pDialog = new ProgressDialog(Groupinion_MyStuff_Answer.this);

        pDialog.setMessage("Loading...");

        pDialog.setCancelable(false);

        try {
            pDialog.show();
        } catch (Exception e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }           
    }

    @Override
    protected String doInBackground(String... params) {
        return Utils.getJSONString(params[0]);
    }

    @Override
    protected void onPostExecute(String result) {
        super.onPostExecute(result);



            if (null != pDialog && pDialog.isShowing()) {
                pDialog.dismiss();
            }           
        }
    }       
}

这是我的 Logcat

 02-26 12:56:58.765: W/System.err(30960): android.view.WindowManager$BadTokenException: Unable to add window -- token android.app.LocalActivityManager$LocalActivityRecord@42161de0 is not valid; is your activity running?
02-26 12:56:58.765: W/System.err(30960):    at android.view.ViewRootImpl.setView(ViewRootImpl.java:720)
02-26 12:56:58.765: W/System.err(30960):    at android.view.WindowManagerImpl.addView(WindowManagerImpl.java:356)
02-26 12:56:58.765: W/System.err(30960):    at android.view.WindowManagerImpl.addView(WindowManagerImpl.java:234)
02-26 12:56:58.765: W/System.err(30960):    at android.view.WindowManagerImpl$CompatModeWrapper.addView(WindowManagerImpl.java:153)
02-26 12:56:58.765: W/System.err(30960):    at android.view.Window$LocalWindowManager.addView(Window.java:557)
02-26 12:56:58.765: W/System.err(30960):    at android.app.Dialog.show(Dialog.java:277)
02-26 12:56:58.775: W/System.err(30960):    at com.android.groupinion.Groupinion_MyStuff_Answer$MyTask.onPreExecute(Groupinion_MyStuff_Answer.java:269)
02-26 12:56:58.775: W/System.err(30960):    at android.os.AsyncTask.executeOnExecutor(AsyncTask.java:586)
02-26 12:56:58.775: W/System.err(30960):    at android.os.AsyncTask.execute(AsyncTask.java:534)
02-26 12:56:58.775: W/System.err(30960):    at com.android.groupinion.Groupinion_MyStuff_Answer.onCreate(Groupinion_MyStuff_Answer.java:182)
02-26 12:56:58.775: W/System.err(30960):    at android.app.Activity.performCreate(Activity.java:5203)
02-26 12:56:58.775: W/System.err(30960):    at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1094)
02-26 12:56:58.775: W/System.err(30960):    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2078)
02-26 12:56:58.775: W/System.err(30960):    at android.app.ActivityThread.startActivityNow(ActivityThread.java:1955)
02-26 12:56:58.775: W/System.err(30960):    at android.app.LocalActivityManager.moveToState(LocalActivityManager.java:135)
02-26 12:56:58.775: W/System.err(30960):    at android.app.LocalActivityManager.startActivity(LocalActivityManager.java:347)
02-26 12:56:58.775: W/System.err(30960):    at com.android.groupinion.Groupinion_Mystuff.replaceContentView(Groupinion_Mystuff.java:461)
02-26 12:56:58.775: W/System.err(30960):    at com.android.groupinion.Groupinion_Mystuff$3.onClick(Groupinion_Mystuff.java:202)
02-26 12:56:58.775: W/System.err(30960):    at android.view.View.performClick(View.java:4191)
02-26 12:56:58.775: W/System.err(30960):    at android.view.View$PerformClick.run(View.java:17229)
02-26 12:56:58.775: W/System.err(30960):    at android.os.Handler.handleCallback(Handler.java:615)
02-26 12:56:58.775: W/System.err(30960):    at android.os.Handler.dispatchMessage(Handler.java:92)
02-26 12:56:58.775: W/System.err(30960):    at android.os.Looper.loop(Looper.java:137)
02-26 12:56:58.775: W/System.err(30960):    at android.app.ActivityThread.main(ActivityThread.java:4960)
02-26 12:56:58.775: W/System.err(30960):    at java.lang.reflect.Method.invokeNative(Native Method)
02-26 12:56:58.775: W/System.err(30960):    at java.lang.reflect.Method.invoke(Method.java:511)
02-26 12:56:58.775: W/System.err(30960):    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1038)
02-26 12:56:58.775: W/System.err(30960):    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:805)
02-26 12:56:58.775: W/System.err(30960):    at dalvik.system.NativeStart.main(Native Method)

【问题讨论】:

  • 你也应该发布你的 logcat 输出
  • 您好,感谢您的回复,我更新了logcat也请建议我
  • 你使用的是包名com.android.groupinion?
  • 是的,这是我的包名
  • 您拥有android.com 域?如果没有,那么你不应该使用它作为包名

标签: android


【解决方案1】:

我猜这个问题出在progressDialog上。我的建议是将 pDialog 定义为顶部活动中的对象(而不是 AsyncTask 的对象)

class MyActivity{
   ProgressDialog pDialog;
}

在显示对话框之前,检查activity是否已经进入完成状态。

if(!activity.isFinishing)
   pDialog.show();

在你的活动的 onDestroy 方法中

protected void onDestroy(){
    super.onDestroy();
    if(pDialog != null && pDialog.isShowing())
       pDialog.cancel();
}

【讨论】:

  • 为什么要在 Activity 完成时显示进度对话框?
  • 您好,我试过了,但是当我们第一次打开该活动时,它会显示进度对话框,如果我第二次尝试打开,它会说同样的异常
  • @GopalRao,当我打开该活动时,我正在从网络下载数据,所以我使用了进度对话框
  • @gopalrao 对不起,我错过了!如果在里面。你能用编辑过的 if(!activity.isfinishing) 再试一次吗
【解决方案2】:

可能的原因是警报对话框的上下文。您可能已完成该活动,因此它试图在该上下文中打开但已关闭。 尝试将该对话框的上下文更改为您的第一个活动,因为它要到最后才会完成。

例如

而不是这个。

         AlertDialog alertDialog = new AlertDialog.Builder(this).create();

尝试使用

        AlertDialog alertDialog = new AlertDialog.Builder(FirstActivity.getInstance()).create();

【讨论】:

    【解决方案3】:

    试试pDialog = new ProgressDialog(activity);,而不是:

    pDialog = new ProgressDialog(yourClass.this);
    

    注意传递的参数。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-12-17
      • 2011-01-20
      • 1970-01-01
      • 1970-01-01
      • 2022-08-23
      • 2011-01-14
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多