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): 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): com.facebook.android.AsyncFacebookRunner$1 で。実行 (AsyncFacebookRunner.java:86)

これUtility.javaは、CookieManager が作成されていない場合にインスタンス化に失敗する可能性があるバグを回避するためのものCookieSyncManagerです。

CookieSyncManager syncManager = CookieSyncManager.createInstance(context);  

これに対する解決策を提案してください...

4

1 に答える 1

0

この質問で使用されている非推奨のログアウト方法をまだ使用している古いアプリケーションで、このエラーに遭遇しました。時間がないため、アップグレードする代わりに、SDK にパッチを適用して迅速な修正を行うことにしました。

スタック トレースが示唆するように、問題はこの行で、CookieSyncManager に渡されるコンテキスト引数が null であることです。

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 に答える