1

在我的android应用程序中,使用 facebook 帐户我可以登录到我的应用程序,但是当我尝试从 facebook(从应用程序)注销时,显示错误。

这是我的代码。

mAsyncRunner.logout(this, new RequestListener() {
        @Override
        public void onComplete(String response, Object state) {
            Log.d("Logout from Facebook", response);
            if (Boolean.parseBoolean(response) == true) {
                runOnUiThread(new Runnable() {

                    @Override
                    public void run() {
                        // make Login button visible


                    }

                });

            }
        }

错误

11-15 06:58:22.480: E/AndroidRuntime(947): 致命异常: Thread-98 11-15 06:58:22.480: E/AndroidRuntime(947): java.lang.IllegalArgumentException: 无效的上下文参数 11-15 06:58:22.480: E/AndroidRuntime(947): 在 android.webkit.CookieSyncManager.createInstance(CookieSyncManager.java:86) 11-15 06:58:22.480: E/AndroidRuntime(947): 在 com.facebook.Utility .clearCookiesForDomain(Utility.java:370) 11-15 06:58:22.480: E/AndroidRuntime(947): at com.facebook.Utility.clearFacebookCookies(Utility.java:394) 11-15 06:58:22.480: E /AndroidRuntime(947): 在 com.facebook.Session.closeAndClearTokenInformation(Session.java:673) 11-15 06:58:22.480: E/AndroidRuntime(947): 在 com.facebook.android.Facebook.logoutImpl(Facebook. java:652) 11-15 06:58:22.480: E/AndroidRuntime(947): at com.facebook.android.AsyncFacebookRunner$1。运行(AsyncFacebookRunner.java:86)

这是为了Utility.java解决一个错误,即如果CookieSyncManager从未创建过 CookieManager 可能无法实例化。

CookieSyncManager syncManager = CookieSyncManager.createInstance(context);  

请为此提出任何解决方案...

4

1 回答 1

0

我在一个旧应用程序中遇到了这个错误,该应用程序仍在使用这个问题中使用的现已弃用的注销方法。由于时间不够,我选择修补 SDK 以快速修复而不是升级。

正如堆栈跟踪所暗示的,问题在于在这一行,传递给 CookieSyncManager 的上下文参数为空:

android.webkit.CookieSyncManager.createInstance(CookieSyncManager.java:86)

如果再往上看,可以看到传入的 Context 参数是 Facebook SDK 中 Session 类的 staticContext 成员变量。无论出于何种原因,他们将此变量设置为 null,因此当调用注销时,应用程序会因此异常而崩溃。

为了解决这个问题,我刚刚编辑了 Session 类以使 initializeStaticContext 成为公共方法。然后,在调用注销之前调用它:

Session.initializeStaticContext(this.getApplicationContext());
mAsyncRunner.logout(...

当然,这不是最好的解决方案,但它可以完成工作。

于 2014-04-12T21:43:00.563 回答