Исключение форм Xamarin: windowmanagerbadtokenexception

Я сделал сообщение здесь: http://forums.xamarin.com/discussion/22386/exit-app-through-back-open-up-again-and-click-on-picker-exception#latest но я также пытаюсь stackoverflow.

Моя проблема в том, что когда я выхожу из приложения и перезапускаю его, а затем нажимаю на средство выбора, возникает исключение. Вот очень простой пример:

    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.


person Tib51    schedule 18.08.2014    source источник


Ответы (1)


Оказывается, все, что мне нужно было сделать, это обновить. Я не ожидал этого, потому что я только что установил Xamarin, и потому что ни VS, ни Xamarin Studio не показывали никаких обновлений.

Для всех, кто сталкивался с этим: перейдите в tools\Nuget Package Manager\Package manager console и введите: update-package xamarin.forms

person Tib51    schedule 18.08.2014
comment
Спасибо за это, указал мне правильное направление на другой экземпляр этого исключения - в моем случае я получил его в обработчике крана, который использовал DisplayAlert. После повторного запуска приложения выдало это исключение. Я использовал пробную копию Xamarin, загруженную 29 ноября 2014 г. — у нее была версия Forms 1.0.xxx, когда последней была версия 1.2.xxx. - person James World; 30.11.2014