我try 通过Facebook API连接到Facebook,我遵循以下示例:https://github.com/facebook/facebook-android-sdk/tree/master/examples/simple

一切正常,但是当我try 编辑一些代码时,我的意思是希望在登录成功后显示对话框POST消息,如下所示:

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)

有什么 idea 吗?

推荐答案

当显示不再存在的上下文的对话框时,可能会发生这种情况.常见情况——如果"显示对话框"操作在异步操作之后,并且在该操作期间,原始活动(即对话框的父级)被销毁.有关详细说明,请参阅以下博客帖子和 comments :

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

从上面的堆栈跟踪来看,facebook库似乎异步派生了auth操作,并且您有一个处理程序回调机制(在侦听器上调用onComplete),可以轻松创建这种场景.

当我在我的应用程序中看到这篇报道时,它非常罕见,并且与博客帖子中的体验相匹配.活动出现问题/在任务执行过程中被销毁.我不知道每次修改都会导致这种情况,但也许您引用了一个活动作为对话框的上下文,而该对话框在代码执行时总是会被 destruct ?

此外,虽然我不确定这是否是判断您的活动是否正在运行的最佳方法,但请参阅以下答案,了解一种方法:

Check whether activity is active

Android相关问答推荐

Android Locate对象中的' et '时间戳代表什么?

Jetpack编写:通过viewModels()vs viewModel View ModernName()'

关于BLE扫描工作原理的说明

在卡片上创建圆角底部边框

无法将项目添加到文件室数据库

如何从URI中获取图像大小

使用Kotline绑定时,ViewHolder无法识别文本视图

Jetpack Compose中尺寸不断增加的动画

在java android studio项目上安装mapbox

Android kotlin 中闪屏 API 执行完成后如何根据身份验证将用户导航到特定屏幕

Gradle在我的Android Compose项目中继续推广依赖版本

appcompat 依赖从何而来?

如何在 Jetpack Compose 中设置行宽等于 TextField 的宽度?

在 Jetpack Compose 中找不到 Path 的减号()

Android Studio Emulator Internet 连接问题仅是第一次

如何在 Jetpack compose 中将 Canvas 中的文本居中?

Kotlin Compose forEach 中的负间距

如何使用 Jetpack Compose 在应用程序中实现本地化

设备文件资源管理器-ROOM 数据库中的数据库文件夹为空

WindowManager 内的 RecyclerView 不更新