2013-04-24 27 views
0

我一直有一個問題,當我嘗試從我的應用程序從Facebook註銷。 每次我嘗試註銷時,我都會收到NullPointerException。在logcat中給出了以下內容:在我的onCreate方法Android的Facebook登出

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) 

我已經初始化一切:

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); 

我註銷監聽器將執行以下操作:

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); 
        } 
       }); 
      } 
     }  
    }); 

它主要有兩個邏輯,它如果會話有效則註銷,否則將用戶登錄。

任何想法wh我有例外嗎?我開始認爲這是與我通過的Context有關,但不完全確定。

有時,按鈕似乎只是工作,有時它會拋出異常。

謝謝

回答

0

請嘗試以下代碼。在我的情況下,它正在工作

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(); 
      } 
     } 
+0

以前是用getApplicationContext()試過,同樣的問題仍然存在。 – 2013-04-24 11:56:24

+0

現在我省略了整個註銷方法,它似乎工作。 – 2013-04-24 11:57:38

+0

我做了一些編輯。現在嘗試一下。我希望這會起作用。 – Rohit 2013-04-24 12:01:27