Получение «BadTokenException: невозможно добавить окно» при попытке показать диалог Facebook – Android

Я получаю исключение Bad Token при попытке показать диалог публикации на стене из SDK Facebook (это происходит каждые 2 раза, когда я запускаю приложение).

У меня есть кнопка «публикация», и ее задача – показать диалог, если пользователь зарегистрировался в своей учетной записи FB или отобразит диалоговое окно входа в систему (а затем сразу же отобразит диалог «post on wall»), если пользователь isn ' T вошел в его аккаунт.

Вот кнопка прослушивания кнопки «Опубликовать» –

mPostButton.setOnClickListener(new OnClickListener() { public void onClick(View v) { if(mLoginButton.getVisibility() == 0) postOnWall(); else mLoginButton.performClick(); } }); 

Вот слушатель onAuthSucceed () –

 public void onAuthSucceed() { postOnWall(); } 

Вот функция PostOnWall (которая показывает диалог публикации) –

  public void postOnWall() { Bundle params = new Bundle(); params.putString("name", FBname); params.putString("link", FBlink); params.putString("description", FBdescription); params.putString("picture", FBpicture); con = this; mFacebook.dialog(con, "feed", params, new SampleDialogListener()); } 

Вот журнал ошибки –

  05-05 16:25:09.601: WARN/WindowManager(109): Attempted to add application window with unknown token HistoryRecord{405416b0 android.alco/.do_drive}. Aborting. 05-05 16:25:27.292: ERROR/AndroidRuntime(20089): android.view.WindowManager$BadTokenException: Unable to add window -- token android.os.BinderProxy@405db9f8 is not valid; is your activity running? 05-05 16:25:27.292: ERROR/AndroidRuntime(20089): at android.view.ViewRoot.setView(ViewRoot.java:527) 05-05 16:25:27.292: ERROR/AndroidRuntime(20089): at android.view.WindowManagerImpl.addView(WindowManagerImpl.java:177) 05-05 16:25:27.292: ERROR/AndroidRuntime(20089): at android.view.WindowManagerImpl.addView(WindowManagerImpl.java:91) 05-05 16:25:27.292: ERROR/AndroidRuntime(20089): at android.view.Window$LocalWindowManager.addView(Window.java:424) 05-05 16:25:27.292: ERROR/AndroidRuntime(20089): at android.app.Dialog.show(Dialog.java:241) 05-05 16:25:27.292: ERROR/AndroidRuntime(20089): at com.facebook.android.Facebook.dialog(Facebook.java:622) 05-05 16:25:27.292: ERROR/AndroidRuntime(20089): at android.alco.do_drive.postOnWall(do_drive.java:258) 05-05 16:25:27.292: ERROR/AndroidRuntime(20089): at android.alco.do_drive$SampleAuthListener.onAuthSucceed(do_drive.java:172) 05-05 16:25:27.292: ERROR/AndroidRuntime(20089): at android.alco.SessionEvents.onLoginSuccess(SessionEvents.java:78) 05-05 16:25:27.292: ERROR/AndroidRuntime(20089): at android.alco.LoginButton$LoginDialogListener.onComplete(LoginButton.java:100) 05-05 16:25:27.292: ERROR/AndroidRuntime(20089): at com.facebook.android.Facebook$1.onComplete(Facebook.java:308) 05-05 16:25:27.292: ERROR/AndroidRuntime(20089): at com.facebook.android.FbDialog$FbWebViewClient.shouldOverrideUrlLoading(FbDialog.java:133) 

Я все посмотрел, и я не могу найти решение.

EDIT. Это происходит только тогда, когда пользователь не вошел в систему. В этом случае он нажимает кнопку «publish», регистрируется, а затем вызывается функция postOnWall, которая генерирует ошибку. Я работаю над ним уже 2 дня и ничего не могу найти.

Благодаря!

Solutions Collecting From Web of "Получение «BadTokenException: невозможно добавить окно» при попытке показать диалог Facebook – Android"

 @Override public void onPageStarted(WebView view, String url, Bitmap favicon) { Log.d("Facebook-WebView", "Webview loading URL: " + url); super.onPageStarted(view, url, favicon); if(FbDialog.this.isShowing()) mSpinner.show(); } 

И, конечно, есть случай, когда код, такой как

 View view = getLocalActivityManager().startActivity(id, intent).getDecorView(); setContentView(view); 

Запускается внутри производного класса ActivityGroup – как в случае переключения между многими действиями под одной вкладкой вкладки Activity. Убедитесь, что «это» в

 AlertDialog.Builder builder = new AlertDialog.Builder(WhateverActivity.this); 

Заменяется надлежащей ссылкой на родителя WhateverActivity, например

 AlertDialog.Builder builder = new AlertDialog.Builder(ActivityGroupDerivedParentOfWhateverActivity.this); 

Похоже, что вы предоставили некоторый метод с объектом context / activity, который больше не активен. Вероятно, в postOnWall-методе. Является ли this в этом методе отображаемой в данный момент деятельностью?

По одной и той же проблеме. Насколько я могу судить, от googling, это связано с вашей деятельностью, иногда не будучи готовой, когда активность входа в Facebook возвращает результат. Зачем? Нет подсказки.

Но я думаю, что это будет работать лучше: определите флаг в своем классе, установите флаг в AuthListener и покажите предупреждение в флажке onStart if. Тогда вы наверняка будете в комфорте своей деятельности:

 private boolean authSuccess = false; 

 public class SampleAuthListener implements AuthListener { authSuccess = true; 

 protected void onStart() { super.onStart(); if (authSuccess) { alert.show(); } } 

Отказ от ответственности: у меня очень мало опыта Java / Android.