尝试显示Facebook对话框时出现“BadTokenException:无法添加窗口” – Android

当试图从Facebook SDK显示发布在墙上的对话框时,我得到一个坏的令牌exception(它每2次运行我的应用程序发生)。

我有一个“发布”button,其作用是显示对话框,如果用户login到他的FB账户,或者显示login对话框(然后立即显示“在墙上张贴”对话框),如果用户不是' tlogin到他的帐户。

这是“发布”button的点击监听器 –

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) 

我看遍了,我找不到解决scheme。

编辑 – 这只发生在用户没有login的情况下。在这种情况下,他按下“发布”button,login,然后调用“postOnWall”函数,这会产生错误。 我现在正在为此工作2天,并且找不到任何关于它的事情。

谢谢!

Solutions Collecting From Web of "尝试显示Facebook对话框时出现“BadTokenException:无法添加窗口” – 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派生类中运行的 – 就像在选项卡上的单个选项卡下切换许多活动一样。 确保在这个“这个”

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

被WhateverActivity的父类的适当引用所取代

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

看起来您已经提供了一些方法,其中的上下文/活动对象不再处于活动状态。 可能在postOnWall方法中。 该方法中的这个是当前显示的活动吗?

面对同样的问题。 据我所知,从谷歌search,它的做你的活动有时没有准备好,当Facebooklogin活动返回结果。 为什么? 没有线索。

但我认为这会更好:在你的类中定义一个标志,在AuthListener中设置标志,并在onStart中显示警告标志。 那么你肯定会在你自己的活动舒适:

 private boolean authSuccess = false; 

 public class SampleAuthListener implements AuthListener { authSuccess = true; 

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

免责声明:我有很less的Java / Android的经验。