Не удалось добавить оконный токен android.os.BinderProxy недействителен; Работает ли ваша деятельность?

Я пытаюсь подключиться к Facebook через API Facebook, я следую этому примеру: https://github.com/facebook/facebook-android-sdk/tree/master/examples/simple

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

public void onAuthSucceed() { mText.setText("You have logged in! "); //This is the code to call the post message dialog. mFacebook.dialog(Example.this, "feed",new SampleDialogListener()); } 

Я получаю эту ошибку в logcat:

 03-02 13:32:08.629: E/AndroidRuntime(14991): android.view.WindowManager$BadTokenException: Unable to add window -- token android.os.BinderProxy@405180f8 is not valid; is your activity running? 03-02 13:32:08.629: E/AndroidRuntime(14991): at android.view.ViewRoot.setView(ViewRoot.java:532) 03-02 13:32:08.629: E/AndroidRuntime(14991): at android.view.WindowManagerImpl.addView(WindowManagerImpl.java:177) 03-02 13:32:08.629: E/AndroidRuntime(14991): at android.view.WindowManagerImpl.addView(WindowManagerImpl.java:91) 03-02 13:32:08.629: E/AndroidRuntime(14991): at android.view.Window$LocalWindowManager.addView(Window.java:424) 03-02 13:32:08.629: E/AndroidRuntime(14991): at android.app.Dialog.show(Dialog.java:241) 03-02 13:32:08.629: E/AndroidRuntime(14991): at com.facebook.android.Facebook.dialog(Facebook.java:780) 03-02 13:32:08.629: E/AndroidRuntime(14991): at com.facebook.android.Facebook.dialog(Facebook.java:737) 03-02 13:32:08.629: E/AndroidRuntime(14991): at com.facebook.android.Example$SampleAuthListener.onAuthSucceed(Example.java:113) 03-02 13:32:08.629: E/AndroidRuntime(14991): at com.facebook.android.SessionEvents.onLoginSuccess(SessionEvents.java:78) 03-02 13:32:08.629: E/AndroidRuntime(14991): at com.facebook.android.Example$LoginDialogListener.onComplete(Example.java:88) 03-02 13:32:08.629: E/AndroidRuntime(14991): at com.facebook.android.Facebook$1.onComplete(Facebook.java:320) 03-02 13:32:08.629: E/AndroidRuntime(14991): at com.facebook.android.FbDialog$FbWebViewClient.shouldOverrideUrlLoading(FbDialog.java:144) 03-02 13:32:08.629: E/AndroidRuntime(14991): at android.webkit.CallbackProxy.uiOverrideUrlLoading(CallbackProxy.java:218) 03-02 13:32:08.629: E/AndroidRuntime(14991): at android.webkit.CallbackProxy.handleMessage(CallbackProxy.java:337) 03-02 13:32:08.629: E/AndroidRuntime(14991): at android.os.Handler.dispatchMessage(Handler.java:99) 03-02 13:32:08.629: E/AndroidRuntime(14991): at android.os.Looper.loop(Looper.java:130) 03-02 13:32:08.629: E/AndroidRuntime(14991): at android.app.ActivityThread.main(ActivityThread.java:3687) 03-02 13:32:08.629: E/AndroidRuntime(14991): at java.lang.reflect.Method.invokeNative(Native Method) 03-02 13:32:08.629: E/AndroidRuntime(14991): at java.lang.reflect.Method.invoke(Method.java:507) 03-02 13:32:08.629: E/AndroidRuntime(14991): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:867) 03-02 13:32:08.629: E/AndroidRuntime(14991): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:625) 03-02 13:32:08.629: E/AndroidRuntime(14991): at dalvik.system.NativeStart.main(Native Method) 

Есть идеи?

Solutions Collecting From Web of "Не удалось добавить оконный токен android.os.BinderProxy недействителен; Работает ли ваша деятельность?"

Это может произойти, когда вы показываете диалог для контекста, который больше не существует. Обычный случай – если операция «показать диалог» после асинхронной операции, и во время этой операции исходное действие (то есть должно быть родителем вашего диалога) будет уничтожено. Для хорошего описания см. Это сообщение в блоге и комментарии:

http://dimitar.me/android-displaying-dialogs-from-background-threads/

Из вышеприведенной трассировки стека кажется, что библиотека facebook асинхронно отключает аут-операцию, и у вас есть механизм Handler-Callback (onComplete, вызываемый слушателем), который может легко создать этот сценарий.

Когда я видел это в своем приложении, он довольно редко встречается в блоге. Что-то пошло не так для деятельности / оно было разрушено во время работы AsyncTask. Я не знаю, как это может произойти при каждом изменении вашей модификации, но, возможно, вы ссылаетесь на Activity как на контекст для диалога, который всегда уничтожается ко времени выполнения вашего кода?

Кроме того, хотя я не уверен, что это лучший способ узнать, работает ли ваша активность, см. Этот ответ для одного из методов:

Проверьте, активна ли активность

Я видел, как эта ошибка сообщалась раз в то время из некоторых моих приложений, и вот что я решил для меня:

 if(!((Activity) context).isFinishing()) { //show dialog } 

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

На этом веб-сайте перечислены 3 различных метода проверки работы определенного Activity и предоставления фрагментов кода, которые помогут вам. Однако имейте в виду, что проверка того, что активность все еще работает, рекомендуется только для целей отладки, поскольку ее результат не является чем-то конкретным и, следовательно, не подходит для потока кода / логики.

Я столкнулся с такой же проблемой. Вызов '(!isFinishing())' предотвратил крах, но не смог отобразить сообщение «alert».

Затем я попытался сделать функцию вызова «статическим» , где отображается предупреждение. После этого не произошел сбой, и сообщение также отображается.

Например:

 public static void connect_failure() { Log.i(FW_UPD_APP, "Connect failed"); new AlertDialog.Builder(MyActivity) .setTitle("Title") .setMessage("Message") .setPositiveButton(android.R.string.yes, new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int which) { //do nothing } }) .setIcon(R.drawable.the_image).show(); }