BadTokenException:无法添加窗口——令牌 null 无效;您的活动正在运行吗?在activity.isFinishing语句中

2024-02-27

如果用户仍在当前活动中,我有一个需要在几秒钟后显示的弹出窗口。我实现了一个语句,检查活动是否未完成/销毁,然后显示弹出窗口,对于周末用户来说,它工作得很好:)(从一个活动缓慢单击到另一个活动),但在高压测试中(活动正在重新创建、完成、快速移动形式)活动到活动)这给了我这个错误:

E/UncaughtException:android.view.WindowManager$BadTokenException: 无法添加窗口——token null 无效;是你的活动 跑步? 在 android.view.ViewRootImpl.setView(ViewRootImpl.java:598) 在 android.view.WindowManagerGlobal.addView(WindowManagerGlobal.java:341) 在 android.view.WindowManagerImpl.addView(WindowManagerImpl.java:85) 在 android.widget.PopupWindow.invokePopup(PopupWindow.java:1279) 在 android.widget.PopupWindow.showAtLocation(PopupWindow.java:1040) 在 android.widget.PopupWindow.showAtLocation(PopupWindow.java:1003) 在 com.guides4art.app.ImageSlider.RatePopUp$3.run(RatePopUp.java:86) 在 android.os.Handler.handleCallback(Handler.java:743) 在 android.os.Handler.dispatchMessage(Handler.java:95) 在 android.os.Looper.loop(Looper.java:150) 在 android.app.ActivityThread.main(ActivityThread.java:5546) 在 java.lang.reflect.Method.invoke(本机方法) 在 com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:794) 在 com.android.internal.os.ZygoteInit.main(ZygoteInit.java:684)

code:

   private void showPopUpWindow(final Activity context){


       popupWindow = new PopupWindow(context);

       LinearLayout.LayoutParams layoutParams =new LinearLayout.LayoutParams(
               LinearLayout.LayoutParams.MATCH_PARENT, LinearLayout.LayoutParams.WRAP_CONTENT);
       popupWindow.setHeight(layoutParams.height);
       popupWindow.setWidth(layoutParams.width);
       popupWindow.setOutsideTouchable(true);
       popupWindow.setTouchable(true);
       popupWindow.setFocusable(true);
       popupWindow.setContentView(view);


       ratingBar.setOnRatingBarChangeListener(new RatingBar.OnRatingBarChangeListener() {
           @Override
           public void onRatingChanged(RatingBar ratingBar, float rating, boolean fromUser) {
               if(context instanceof CarSale) {
                   ((CarSale) context).saveRate((int) rating);
                    ((CarSale) context).initRate();
                   title.setText(""+context.getString(R.string.thanksForRate));
               }
               else
                   Log.i("kamil","error");
           }
       });
       closeButton.setOnClickListener(new View.OnClickListener() {
           @Override
           public void onClick(View v) {
               popupWindow.dismiss();
           }
       });


if(!context.isFinishing() || !context.isDestroyed() )
               activityView.post(new Runnable() {
                   @Override
                   public void run() {
                       popupWindow.showAtLocation(context.getWindow().getDecorView(), Gravity.CENTER,0,0);
                   }
               });
   }


//View Pager Class

 @Override
    public void onPageSelected(int position) {
        if(viewPager !=null){
        this.position=position;
        if(position==carList.size()-1 && isRated() && showRateBar)
            new Handler().postDelayed(new Runnable() {
                @Override
                public void run() {
                 new RatePopUp(Cars.this,activityView);
                    showRateBar=false;
                }
            },5*SECOND);

//RatePopUp constructor

 public RatePopUp(Activity context,View activityView){
        LayoutInflater inflater = (LayoutInflater) context
                .getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        view = inflater.inflate(R.layout.rate_popup_layout, null);
        this.activityView=activityView;
        ratingBar = (RatingBar) view.findViewById(R.id.ratingPop);
        title= (TextView)view.findViewById(R.id.rateTitle);
        title.setText(context.getString(R.string.rate_exhibition));
        closeButton = (Button)view.findViewById(R.id.close_button);
        Typeface  typeface =Typeface.createFromAsset(context.getAssets(),"fonts/fontawesome-webfont.ttf");
        closeButton.setTypeface(typeface);
        closeButton.setText(context.getString(R.string.exitIcon));
        showPopUpWindow(context);
    }

试试这个代码:

 new Handler().postDelayed(new Runnable(){

    public void run() {
       popupWindow.showAtLocation(context.getWindow().getDecorView(), Gravity.CENTER,0,0);
    }

}, 200L);

代替:

popupWindow.showAtLocation(context.getWindow().getDecorView(), Gravity.CENTER,0,0);

还要确保你通过ActivityName.this作为上下文..不getApplicationContext()

尝试更换你的runnable代码在showPopUpWindow()有了这个:

runOnUiThread(new Runnable() {
        @Override
        public void run() {
            if (!isFinishing()) {
                popupWindow.showAtLocation(context.getWindow().getDecorView(), Gravity.CENTER, 0, 0);
            }
        }
    });
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

BadTokenException:无法添加窗口——令牌 null 无效;您的活动正在运行吗?在activity.isFinishing语句中 的相关文章

随机推荐

  • 如何将图像中的字符和单词分割成轮廓

    我有一些轮廓图像 我想对其进行分割 这基本上意味着我想将轮廓图像中的所有字符保存到单独的图像中 但我得到了几张噪声图像以及所需的输出 我想知道如何在不影响所需输出的情况下去除所有噪声图像 我试图改变价值观w and h 这样我就可以最大限度
  • 如何使用 Firebug 扩展调试 Greasemonkey 脚本?

    我没有找到使用 Firebug 扩展调试 Greasemonkey 脚本的方法 有谁知道如何做到这一点 Thanks 更新者 Mene S human 修复现在已被 Firefox 30 和 Firebug 2 破坏 Firefox 31m
  • 带 dom-repeat 的 Polymer 1.0 动态模板

    我有一个场景 我想创建动态template将与 Polymer 一起使用的元素dom repeat 我当前的原型如下 JSbin演示 http jsbin com hitotahoqe edit js output var domRepea
  • org.openqa.selenium.NoSuchElementException:尝试通过 CssSelector 定位 card-fields-iframe 时,返回的节点 (null) 不是 DOM 元素

    我正在尝试通过部分 id 来定位 iframe 对于这个方法 我使用了 driver switchTo frame driver findElement By cssSelector iframe id card fields number
  • Java计算MD5哈希值

    In http www anyexample com programming java java simple class to compute md5 hash xml http www anyexample com programmin
  • FireFox 中内容可编辑的光标位置/样式

    我在 FireFox 3 中使用 contentEditable 时遇到问题 我遇到的问题是 在单击 div 后 光标将出现在 div 上方或仅部分出现在 div 中 直到我开始输入 此时它的行为正确 关于如何阻止这种情况发生有什么想法吗
  • 为什么在 exec() 之前调用 quit() 不会退出应用程序?

    为什么这个程序可以正常运行并显示主窗口 我希望它会退出quit 在构造函数中调用 主要 cpp include
  • Qt 5.0程序在QtCreator中运行但不在外部运行

    这是上下文 我在Windows 7 x64下用Qt开发了一个程序 我已经升级到Qt 5 0 1 QtCreator 2 6 1 编译器VS2010 现在状态 我的程序在 QtCreator 中运行良好 但是当我在外面尝试时 我收到了几个错误
  • 在 Swift 中向 NSLayoutAnchor 约束添加乘数

    锚约束简化了添加约束的过程 但故事板中可用的乘数属性似乎并不适用于所有类型的约束 例如 作为根据这里的答案 https stackoverflow com questions 63042059 center uilabel created
  • 使用 awk 删除包含唯一第一个字段的行?

    希望仅打印具有重复第一个字段的行 例如从看起来像这样的数据 1 abcd 1 efgh 2 ijkl 3 mnop 4 qrst 4 uvwx 应该打印出 1 abcd 1 efgh 4 qrst 4 uvwx 仅供参考 我的数据中第一个字
  • hadoop/bin/hadoop 没有示例 jar

    我安装了 hadoop 2 2 0 并尝试运行示例 wordcount 程序 为此 我首先使用以下命令将数据导入到 hdfs bin hadoop fs copyFromLocal home prassanna Desktop input
  • FileBeat 收获问题

    我们使用 ELK 来控制我们的程序日志 在我们的 FileBeat 配置中 我们从中获取30种不同包含每秒更新的文件的路径 它仅在产品机器中每秒更新 在其他开发机器中 我们的日志要少得多 我们的日志文件不会被删除 直到它们变旧并且我们停止使
  • Indy 和 smtps:无法连接

    我正在尝试使用 Indy 和说明的技术从 smtps 安全 smtp 发送电子邮件在 Marco Cant 的这篇文章中 http www marcocantu com tips oct06 gmail html 这就是我正在使用的 obj
  • 在 SciKit 线性回归上出现“ValueError:形状未对齐”

    一般来说 SciKit 和 Python 的线性代数 机器学习相当新 所以我似乎无法解决以下问题 我有一个训练集和一个测试数据集 其中包含连续值和离散 分类值 CSV 文件被加载到 Pandas DataFrame 中并匹配形状 分别为 1
  • 初始化列表与向量

    在 C 11 中 可以使用初始化列表来初始化函数中的参数 其目的是什么 不能用 const 向量做同样的事情吗 下面两个程序有什么区别 使用初始化列表 include
  • Apache Beam 计数器/指标在 Flink WebUI 中不可用

    我正在使用 Flink 1 4 1 和 Beam 2 3 0 并且想知道是否可以在 Flink WebUI 或任何地方 中提供可用的指标 如 Dataflow WebUI 中那样 我用过类似的计数器 import org apache be
  • 数据库操作的任务与服务

    JavaFX 8 任务和服务之间有什么区别 在哪种情况下使用其中一个更好 数据库操作用什么比较好 任务和服务之间的主要区别 一次性执行与重复执行 A Task http docs oracle com javafx 2 api javafx
  • C 中的布谷鸟哈希

    有没有人有实施布谷鸟哈希 http en wikipedia org wiki Cuckoo hashing在C语言中 如果有一个开源的非 GPL 版本那就完美了 既然 Adam 在评论中提到了它 有人知道为什么它没有被太多使用吗 这只是一
  • Python 3.10 匹配/大小写与常量[重复]

    这个问题在这里已经有答案了 我尝试用更短的代码块替换 if elif elif else 代码块match case从 Python 3 10 开始 我定义了三个常量 并希望对每个常量执行不同的操作 因此我的代码大致如下所示 gt gt g
  • BadTokenException:无法添加窗口——令牌 null 无效;您的活动正在运行吗?在activity.isFinishing语句中

    如果用户仍在当前活动中 我有一个需要在几秒钟后显示的弹出窗口 我实现了一个语句 检查活动是否未完成 销毁 然后显示弹出窗口 对于周末用户来说 它工作得很好 从一个活动缓慢单击到另一个活动 但在高压测试中 活动正在重新创建 完成 快速移动形式