Android facebook注销

Android facebook注销,android,facebook,Android,Facebook,当我尝试在我的应用程序中从facebook注销时,我遇到了一个问题。 每次尝试注销时,我都会收到一个NullPointerException。LogCat提供以下信息: 04-24 11:41:03.853: E/AndroidRuntime(523): FATAL EXCEPTION: main 04-24 11:41:03.853: E/AndroidRuntime(523): java.lang.NullPointerException 04-24 11:41:03.853: E/Andr

当我尝试在我的应用程序中从facebook注销时,我遇到了一个问题。 每次尝试注销时,我都会收到一个
NullPointerException
。LogCat提供以下信息:

04-24 11:41:03.853: E/AndroidRuntime(523): FATAL EXCEPTION: main
04-24 11:41:03.853: E/AndroidRuntime(523): java.lang.NullPointerException
04-24 11:41:03.853: E/AndroidRuntime(523):  at android.webkit.CookieSyncManager.createInstance(CookieSyncManager.java:96)
04-24 11:41:03.853: E/AndroidRuntime(523):  at com.facebook.internal.Utility.clearCookiesForDomain(Utility.java:261)
04-24 11:41:03.853: E/AndroidRuntime(523):  at com.facebook.internal.Utility.clearFacebookCookies(Utility.java:285)
04-24 11:41:03.853: E/AndroidRuntime(523):  at com.facebook.Session.closeAndClearTokenInformation(Session.java:593)
04-24 11:41:03.853: E/AndroidRuntime(523):  at com.facebook.android.Facebook.logoutImpl(Facebook.java:667)
04-24 11:41:03.853: E/AndroidRuntime(523):  at com.facebook.android.Facebook.logout(Facebook.java:644)
04-24 11:41:03.853: E/AndroidRuntime(523):  at com.ali.health.and.fitness.exercises.FacebookIntegration$1.onClick(FacebookIntegration.java:83)
04-24 11:41:03.853: E/AndroidRuntime(523):  at android.view.View.performClick(View.java:2408)
04-24 11:41:03.853: E/AndroidRuntime(523):  at android.view.View$PerformClick.run(View.java:8816)
04-24 11:41:03.853: E/AndroidRuntime(523):  at android.os.Handler.handleCallback(Handler.java:587)
04-24 11:41:03.853: E/AndroidRuntime(523):  at android.os.Handler.dispatchMessage(Handler.java:92)
04-24 11:41:03.853: E/AndroidRuntime(523):  at android.os.Looper.loop(Looper.java:123)
04-24 11:41:03.853: E/AndroidRuntime(523):  at android.app.ActivityThread.main(ActivityThread.java:4627)
04-24 11:41:03.853: E/AndroidRuntime(523):  at java.lang.reflect.Method.invokeNative(Native Method)
04-24 11:41:03.853: E/AndroidRuntime(523):  at java.lang.reflect.Method.invoke(Method.java:521)
04-24 11:41:03.853: E/AndroidRuntime(523):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868)
04-24 11:41:03.853: E/AndroidRuntime(523):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626)
04-24 11:41:03.853: E/AndroidRuntime(523):  at dalvik.system.NativeStart.main(Native Method)
logout.setOnClickListener(new OnClickListener()
    {

        public void onClick(View arg0) 
        {

            if(fb.isSessionValid())
            {
                try {
                    fb.logout(FacebookIntegration.this);
                    Editor  editor = sp.edit();
                    editor.clear();
                    editor.commit(); 
                } catch (MalformedURLException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                } catch (IOException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
            }

            else
            {
                fb.authorize(FacebookIntegration.this,new String[]{"email"},Facebook.FORCE_DIALOG_AUTH ,new DialogListener() {

                    @Override
                    public void onFacebookError(FacebookError e) {
                        Toast.makeText(FacebookIntegration.this, "onFacebookCancel", Toast.LENGTH_SHORT);
                    }

                    @Override
                    public void onError(DialogError e) {
                        Toast.makeText(FacebookIntegration.this, "onError", Toast.LENGTH_SHORT);
                    }

                    @Override
                    public void onComplete(Bundle values) { 
                        Toast.makeText(FacebookIntegration.this, "onComplete", Toast.LENGTH_SHORT);
                        Editor editor = sp.edit();
                        editor.putString("access_token", fb.getAccessToken());
                        editor.putLong("access_expires", fb.getAccessExpires());
                        editor.commit();
                    } 

                    @Override
                    public void onCancel() {
                        Toast.makeText(FacebookIntegration.this, "onCancel", Toast.LENGTH_SHORT);
                    }
                });
            }
        }    
    }); 
我已经在onCreate方法中初始化了所有内容:

String APP_ID = getString(R.string.APP_ID);

    fb = new Facebook(APP_ID);

    sp = getPreferences(MODE_PRIVATE);

    String access_token = sp.getString("access_token", null);
    long expires = sp.getLong("access_expires", 0);

    if(access_token!=null)
    {
        fb.setAccessToken(access_token);
    }
    if(expires!=0)
    {
        fb.setAccessExpires(expires); 
    }

    logout = (Button)findViewById(R.id.button1);
我的注销侦听器执行以下操作:

04-24 11:41:03.853: E/AndroidRuntime(523): FATAL EXCEPTION: main
04-24 11:41:03.853: E/AndroidRuntime(523): java.lang.NullPointerException
04-24 11:41:03.853: E/AndroidRuntime(523):  at android.webkit.CookieSyncManager.createInstance(CookieSyncManager.java:96)
04-24 11:41:03.853: E/AndroidRuntime(523):  at com.facebook.internal.Utility.clearCookiesForDomain(Utility.java:261)
04-24 11:41:03.853: E/AndroidRuntime(523):  at com.facebook.internal.Utility.clearFacebookCookies(Utility.java:285)
04-24 11:41:03.853: E/AndroidRuntime(523):  at com.facebook.Session.closeAndClearTokenInformation(Session.java:593)
04-24 11:41:03.853: E/AndroidRuntime(523):  at com.facebook.android.Facebook.logoutImpl(Facebook.java:667)
04-24 11:41:03.853: E/AndroidRuntime(523):  at com.facebook.android.Facebook.logout(Facebook.java:644)
04-24 11:41:03.853: E/AndroidRuntime(523):  at com.ali.health.and.fitness.exercises.FacebookIntegration$1.onClick(FacebookIntegration.java:83)
04-24 11:41:03.853: E/AndroidRuntime(523):  at android.view.View.performClick(View.java:2408)
04-24 11:41:03.853: E/AndroidRuntime(523):  at android.view.View$PerformClick.run(View.java:8816)
04-24 11:41:03.853: E/AndroidRuntime(523):  at android.os.Handler.handleCallback(Handler.java:587)
04-24 11:41:03.853: E/AndroidRuntime(523):  at android.os.Handler.dispatchMessage(Handler.java:92)
04-24 11:41:03.853: E/AndroidRuntime(523):  at android.os.Looper.loop(Looper.java:123)
04-24 11:41:03.853: E/AndroidRuntime(523):  at android.app.ActivityThread.main(ActivityThread.java:4627)
04-24 11:41:03.853: E/AndroidRuntime(523):  at java.lang.reflect.Method.invokeNative(Native Method)
04-24 11:41:03.853: E/AndroidRuntime(523):  at java.lang.reflect.Method.invoke(Method.java:521)
04-24 11:41:03.853: E/AndroidRuntime(523):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868)
04-24 11:41:03.853: E/AndroidRuntime(523):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626)
04-24 11:41:03.853: E/AndroidRuntime(523):  at dalvik.system.NativeStart.main(Native Method)
logout.setOnClickListener(new OnClickListener()
    {

        public void onClick(View arg0) 
        {

            if(fb.isSessionValid())
            {
                try {
                    fb.logout(FacebookIntegration.this);
                    Editor  editor = sp.edit();
                    editor.clear();
                    editor.commit(); 
                } catch (MalformedURLException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                } catch (IOException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
            }

            else
            {
                fb.authorize(FacebookIntegration.this,new String[]{"email"},Facebook.FORCE_DIALOG_AUTH ,new DialogListener() {

                    @Override
                    public void onFacebookError(FacebookError e) {
                        Toast.makeText(FacebookIntegration.this, "onFacebookCancel", Toast.LENGTH_SHORT);
                    }

                    @Override
                    public void onError(DialogError e) {
                        Toast.makeText(FacebookIntegration.this, "onError", Toast.LENGTH_SHORT);
                    }

                    @Override
                    public void onComplete(Bundle values) { 
                        Toast.makeText(FacebookIntegration.this, "onComplete", Toast.LENGTH_SHORT);
                        Editor editor = sp.edit();
                        editor.putString("access_token", fb.getAccessToken());
                        editor.putLong("access_expires", fb.getAccessExpires());
                        editor.commit();
                    } 

                    @Override
                    public void onCancel() {
                        Toast.makeText(FacebookIntegration.this, "onCancel", Toast.LENGTH_SHORT);
                    }
                });
            }
        }    
    }); 
它基本上有两种逻辑,如果会话有效,它将注销,否则它将用户登录

知道我为什么会有例外吗?我开始认为这与我传递的
上下文有关,但不是完全确定

有时按钮似乎只是工作,有时它抛出异常


谢谢

请尝试以下代码。就我而言,它正在发挥作用

    public void onClick(View arg0) 
    {

        if(fb.isSessionValid())
        {
            try {
                **fb.logout(getApplicationContext());**
                /*Editor  editor = sp.edit();
                editor.clear();
                editor.commit(); */
            } catch (MalformedURLException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            } catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        }

是的,以前用getApplicationContext()尝试过,但同样的问题仍然存在。是的,没有什么区别。我所做的是删除整个fb.logout方法并保留编辑器逻辑。这似乎实际上是正确的。很奇怪,但它工作了谢谢你的帮助,不管怎样,可能是有错误。你可以在这里存档