【问题标题】:Xamarin forms exception: windowmanagerbadtokenexceptionXamarin 形成异常:windowmanagerbadtokenexception
【发布时间】:2014-10-10 22:17:17
【问题描述】:

我在这里发了一个帖子:http://forums.xamarin.com/discussion/22386/exit-app-through-back-open-up-again-and-click-on-picker-exception#latest,但我也在尝试 stackoverflow。

我的问题是,当我退出应用程序并重新启动它,然后单击 Picker 时,会引发异常。这是一个非常简单的例子:

    public static Page GetMainPage()
    {
        Picker priorityPicker = new Picker
        {
            Title = "Priority",
            HorizontalOptions = LayoutOptions.Fill
        };

        // Add all possible priorities
        for (int i = 0; i < 5; i++ )
        {
            //priorityPicker.Items.Add(Priority.PriorityToString(priority));
            priorityPicker.Items.Add(i.ToString());
        }

        return new ContentPage
        {
            Content = new StackLayout 
            {
                Children = { priorityPicker }
            },
        };
    }

如果我运行它,然后退出应用程序,然后重新启动应用程序(全部在模拟器中),我会收到以下异常:

    08-17 23:18:03.247 I/MonoDroid( 2048): UNHANDLED EXCEPTION: Android.Views.WindowManagerBadTokenException: Exception of type 'Android.Views.WindowManagerBadTokenException' was thrown.
    08-17 23:18:03.247 I/MonoDroid( 2048): at Android.Runtime.JNIEnv.CallVoidMethod (intptr,intptr) [0x00062] in /Users/builder/data/lanes/monodroid-mlion-monodroid-4.14-series/a5d57087/source/monodroid/src/Mono.Android/src/Runtime/JNIEnv.g.cs:490
    08-17 23:18:03.247 I/MonoDroid( 2048): at Android.App.Dialog.Show () [0x00043] in /Users/builder/data/lanes/monodroid-mlion-monodroid-4.14-series/a5d57087/source/monodroid/src/Mono.Android/platforms/android-19/src/generated/Android.App.Dialog.cs:2497
    08-17 23:18:03.247 I/MonoDroid( 2048): at Xamarin.Forms.Platform.Android.PickerRenderer.OnClick () <IL 0x0015e, 0x00626>
    08-17 23:18:03.247 I/MonoDroid( 2048): at Xamarin.Forms.Platform.Android.PickerRenderer/PickerListener.OnClick (Android.Views.View) <IL 0x00011, 0x00097>
    08-17 23:18:03.247 I/MonoDroid( 2048): at Android.Views.View/IOnClickListenerInvoker.n_OnClick_Landroid_view_View_ (intptr,intptr,intptr) [0x00011] in /Users/builder/data/lanes/monodroid-mlion-monodroid-4.14-series/a5d57087/source/monodroid/src/Mono.Android/platforms/android-19/src/generated/Android.Views.View.cs:1840
    08-17 23:18:03.247 I/MonoDroid( 2048): at (wrapper dynamic-method) object.60b39a4e-8626-4d2b-8134-0e521addd16d (intptr,intptr,intptr) <IL 0x00017, 0x0001f>
    08-17 23:18:03.247 I/MonoDroid( 2048): 
    08-17 23:18:03.247 I/MonoDroid( 2048):   --- End of managed exception stack trace ---
    08-17 23:18:03.247 I/MonoDroid( 2048): android.view.WindowManager$BadTokenException: Unable to add window -- token android.os.BinderProxy@b0fe82a0 is not valid; is your activity running?
    08-17 23:18:03.247 I/MonoDroid( 2048):  at android.view.ViewRootImpl.setView(ViewRootImpl.java:536)
    08-17 23:18:03.247 I/MonoDroid( 2048):  at android.view.WindowManagerGlobal.addView(WindowManagerGlobal.java:259)
    08-17 23:18:03.247 I/MonoDroid( 2048):  at android.view.WindowManagerImpl.addView(WindowManagerImpl.java:69)
    08-17 23:18:03.247 I/MonoDroid( 2048):  at android.app.Dialog.show(Dialog.java:286)
    08-17 23:18:03.247 I/MonoDroid( 2048):  at xamarin.forms.platform.android.PickerRenderer_PickerListener.n_onClick(Native Method)
    08-17 23:18:03.247 I/MonoDroid( 2048):  at xamarin.forms.platform.android.PickerRenderer_PickerListener.onClick(PickerRenderer_PickerListener.java:29)
    08-17 23:18:03.247 I/MonoDroid( 2048):  at android.view.View.performClick(View.java:4438)
    08-17 23:18:03.247 I/MonoDroid( 2048):  at android.view.View$PerformClick.run(View.java:18422)
    08-17 23:18:03.247 I/MonoDroid( 2048):  at android.os.Handler.handleCallback(Handler.java:733)
    08-17 23:18:03.247 I/MonoDroid( 2048):  at android.os.Handler.dispatchMessage(Handler.java:95)
    08-17 23:18:03.247 I/MonoDroid( 2048):  at android.os.Looper.loop(Looper.java:136)
    08-17 23:18:03.247 I/MonoDroid( 2048):  at android.app.ActivityThread.main(ActivityThread.java:5017)
    08-17 23:18:03.247 I/MonoDroid( 2048):  at java.lang.reflect.Method.invokeNative(Native Method)
    08-17 23:18:03.247 I/MonoDroid( 2048):  at java.lang.reflect.Method.invoke(Method.java:515)
    08-17 23:18:03.247 I/MonoDroid( 2048):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:779)
    08-17 23:18:03.247 I/MonoDroid( 2048):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:595)
    08-17 23:18:03.247 I/MonoDroid( 2048):  at dalvik.system.NativeStart.main(Native Method)
    An unhandled exception occured.

奇怪的是,失败后,我可以重新运行应用程序,然后成功打开选择器。然后,它将再次失败,依此类推。感谢您的帮助。

编辑:DisplayActionSheet 也是如此。

【问题讨论】:

    标签: android xamarin xamarin.android xamarin.forms


    【解决方案1】:

    原来我所要做的就是更新。我没想到会这样,因为我刚刚安装了 Xamarin,而且 VS 和 Xamarin Studio 都没有显示任何更新。

    对于遇到此问题的其他人:转到 tools\Nuget Package Manager\Package manager 控制台并输入:update-package xamarin.forms

    【讨论】:

    • 谢谢你,在这个异常的另一个实例上为我指出了正确的方向 - 在我的例子中,我在使用 DisplayAlert 的水龙头处理程序上得到了它。重新启动应用程序后,它抛出了这个异常。我正在使用 29/11/14 下载的 Xamarin 试用版 - 当最新版本是 1.2.xxx 时,它有一个 1.0.xxx 版本的表单。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-04-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多