2011-09-09 44 views
0

我正在使用Android SDk使用Facebook API。這裏面臨着一個問題:無法在其他活動上調用Facebook功能

如果我住在同一活動(單一活動),我可以使用諸如「牆貼」, 「應用程序請求」等功能。但是,如果我想在其他活動說第三/第四項活動(導航時)我無法訪問「Wall Post」,「應用程序請求」等頁面。 任何人都可以幫我解決這個問題嗎?請告訴我,如果我錯過了什麼。在每個activity的oncreate()方法中,我使用setconnection()和getID()。比我使用菜單從我的Facebook活動調用Facebook功能。

下面是我的代碼:

public void setConnection() { 
     mContext = this; 
     mFacebook = new Facebook(getResources().getString(R.string.FACEBOOK_ID_TEST)); 
     mAsyncRunner = new AsyncFacebookRunner(mFacebook); 

    } 

    public boolean isSession() { 
     sharedPrefs = PreferenceManager.getDefaultSharedPreferences(mContext); 
     String access_token = sharedPrefs.getString("access_token", "x"); 
     Long expires = sharedPrefs.getLong("access_expires", -1); 
     Log.d(TAG, access_token); 

     if (access_token != null && expires != -1) { 
       mFacebook.setAccessToken(access_token); 
       mFacebook.setAccessExpires(expires); 
     } 
     return mFacebook.isSessionValid(); 
} 

    public void getID() 
    { 

     Bundle bundle = new Bundle(); 
     bundle.putString("fields", "birthday"); 
     try { 
      mFacebook.request("me/friends", bundle); 
     } catch (MalformedURLException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } catch (IOException e) { 
      // TODO Auto-generated catch block 
      Log.e("Error in FaceBook Friends List","Exception = "+e.getMessage()); 
      e.printStackTrace(); 
     } 
     if (isSession()) { 
       Log.d(TAG, "sessionValid"); 
       try { 
        mFacebook.request("me/friends", bundle); 
       } catch (MalformedURLException e) { 
        // TODO Auto-generated catch block 
        e.printStackTrace(); 
       } catch (IOException e) { 
        // TODO Auto-generated catch block 
        Log.e("Error in FaceBook Friends List","Exception = "+e.getMessage()); 
        e.printStackTrace(); 
       } 
     } else { 
       // no logged in, so relogin 
       Log.d(TAG, "sessionNOTValid, relogin"); 
       mFacebook.authorize(this, PERMISSIONS, new LoginDialogListener()); 
     } 
    } 

回答

0

你不應該爲每個活動的新的Facebook對象。我建議在您的主要活動中初始化一個帶有靜態Facebook對象的Utility類,並通過其他活動使用此對象。

例如

Class Utiltiy { 
    public static Facebook mFacebook; 

    public static void initialize() { 
     mFacebook = new Facebook(app_id); 
    } 
} 

您在您的主要活動的onCreate()

調用Utility.initialize()和你需要的地方讓Facebook的API調用,您可以使用:

Utility.mFacebook.request(。 ...)。

希望這是有幫助的。