Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/199.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Android棉花糖(6)上的弹出菜单异常,但在Q(Android 10)上有效吗?_Java_Android_Android Studio - Fatal编程技术网

Java Android棉花糖(6)上的弹出菜单异常,但在Q(Android 10)上有效吗?

Java Android棉花糖(6)上的弹出菜单异常,但在Q(Android 10)上有效吗?,java,android,android-studio,Java,Android,Android Studio,我在安卓10上用AVD实现并测试了我的应用程序,效果很好,但在安卓6.0(Marshmellow)上出现了WindowManager$BadTokenException。以下是Java上的代码: public class MainActivity extends AppCompatActivity{ private PopupMenu aMenu; public void OnCreate(){ ... ImageButton button =

我在安卓10上用AVD实现并测试了我的应用程序,效果很好,但在安卓6.0(Marshmellow)上出现了WindowManager$BadTokenException。以下是Java上的代码:

public class MainActivity extends AppCompatActivity{

    private PopupMenu aMenu;

    public void OnCreate(){
        ...
        ImageButton button = findViewById(R.id.id_1);
        aMenu = new PopupMenu(MainActivity.this, button);
        aMenu.getMenuInflater().inflate(R.menu.menu_1,
                aMenu.getMenu());
        ...
    }

    /**
     * This is assigned onClick in a button on activity_main.xml
     */
    public void method(final View view) {
        aMenu.setOnMenuItemClickListener(new PopupMenu.OnMenuItemClickListener() {
            public boolean onMenuItemClick(MenuItem item) {
                int selected = item.getItemId();
                if (selected == ...){
                    ...
                } else if (selected == R.id.id_2) {
                    impotantMethod(view);
                } else {...}
        }
    }

    /**
     * Important method that throws the Exception
     */
    private void importantMethod(final View view){
        final View popup = View.inflate(MainActivity.this, R.layout.popup, null);
        final PopupWindow popupWindow = new PopupWindow(
                popup, LinearLayout.LayoutParams.MATCH_PARENT,
                LinearLayout.LayoutParams.WRAP_CONTENT, true
        );
        popupWindow.showAtLocation(view, Gravity.CENTER, 0, 0);
        Button ok_button = popup.findViewById(R.id.ok_button);
        final Button importantButton = popup.findViewById(R.id.important_button);
        ...
        importantButton.setOnClickListener(new OnClickListener() {
            @Override
            public void onClick(View v) {
                Context wrapper = new ContextThemeWrapper(MainActivity.this,
                        R.style.PopupMenuTheme);
                PopupMenu popupFailed = new PopupMenu(wrapper, importantButton);
                popupFailed.getMenuInflater().inflate(R.menu.menu_to_show,
                        popupFailed.getMenu());
                popupFailed.setOnMenuItemClickListener(new PopupMenu.OnMenuItemClickListener() {
                    @Override
                    public boolean onMenuItemClick(MenuItem item) {
                        ...
                        return true;
                    }
                }); popupFailed.show();
            }
        });
        ok_button.setOnClickListener(new OnClickListener() {
            @Override
            public void onClick(View v) {...}
        });
    }

}
我试图只显示必要的代码,但如果需要更多的代码来了解失败的地方,我可以编辑它。以下是异常的完整堆栈跟踪:

E/AndroidRuntime: FATAL EXCEPTION: main
    Process: com.group.mainpackage, PID: 6422
    android.view.WindowManager$BadTokenException: Unable to add window -- token android.view.ViewRootImpl$W@f1adfa6 is not valid; is your activity running?
        at android.view.ViewRootImpl.setView(ViewRootImpl.java:567)
        at android.view.WindowManagerGlobal.addView(WindowManagerGlobal.java:310)
        at android.view.WindowManagerImpl.addView(WindowManagerImpl.java:85)
        at android.widget.PopupWindow.invokePopup(PopupWindow.java:1258)
        at android.widget.PopupWindow.showAsDropDown(PopupWindow.java:1110)
        at android.widget.ListPopupWindow.show(ListPopupWindow.java:658)
        at com.android.internal.view.menu.MenuPopupHelper.tryShow(MenuPopupHelper.java:170)
        at com.android.internal.view.menu.MenuPopupHelper.show(MenuPopupHelper.java:124)
        at android.widget.PopupMenu.show(PopupMenu.java:218)
        at com.group.mainpackage.MainActivity$13.onClick(MainActivity.java:<--->)
        at android.view.View.performClick(View.java:5198)
        at android.view.View$PerformClick.run(View.java:21147)
        at android.os.Handler.handleCallback(Handler.java:739)
        at android.os.Handler.dispatchMessage(Handler.java:95)
        at android.os.Looper.loop(Looper.java:148)
        at android.app.ActivityThread.main(ActivityThread.java:5417)
        at java.lang.reflect.Method.invoke(Native Method)
        at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)
E/AndroidRuntime:致命异常:主
进程:com.group.mainpackage,PID:6422
android.view.WindowManager$BadTokenException:无法添加窗口--标记android.view.ViewRootImpl$W@f1adfa6无效;你的活动正在进行吗?
在android.view.ViewRootImpl.setView(ViewRootImpl.java:567)
位于android.view.WindowManagerGlobal.addView(WindowManagerGlobal.java:310)
在android.view.WindowManagerImpl.addView(WindowManagerImpl.java:85)
在android.widget.popuwWindow.invokePopup(popuwWindow.java:1258)中
在android.widget.PopupWindow.showAsDropDown(PopupWindow.java:1110)中
在android.widget.ListPopupWindow.show(ListPopupWindow.java:658)上
在com.android.internal.view.menu.MenuPopupHelper.tryShow上(MenuPopupHelper.java:170)
在com.android.internal.view.menu.MenuPopupHelper.show上(MenuPopupHelper.java:124)
在android.widget.PopupMenu.show(PopupMenu.java:218)中
在com.group.mainpackage.MainActivity$13.onClick(MainActivity.java:)
在android.view.view.performClick上(view.java:5198)
在android.view.view$PerformClick.run(view.java:21147)
位于android.os.Handler.handleCallback(Handler.java:739)
位于android.os.Handler.dispatchMessage(Handler.java:95)
位于android.os.Looper.loop(Looper.java:148)
位于android.app.ActivityThread.main(ActivityThread.java:5417)
位于java.lang.reflect.Method.invoke(本机方法)
在com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run上(ZygoteInit.java:726)
位于com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)
我想说的是,它在使用AVD和我自己的智能手机的安卓10(Q)上运行良好,但在使用AVD和另一款智能手机的安卓6(Marshmellow)上却出现了这个例外

提前谢谢