无法在其他活动上调用Facebook功能

时间:2011-09-09 11:57:46

标签: android facebook

我正在使用Android SDk使用Facebook API。这里面临一个问题:

如果我居住在同一个活动(单一活动)中,我可以使用“Wall Post”等功能, “应用请求”等但是如果我想在其他活动中使用这些功能说第三/第四活动(导航时)我无法访问“Wall Post”,“App request”等页面。 任何人都可以帮我解决这个问题吗?请告诉我,如果我遗失了什么。在每个活动的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());
         }
    }

1 个答案:

答案 0 :(得分:0)

您不应为每项活动创建新的Facebook对象。我建议使用一个带有静态Facebook对象的Utility类,您可以在主活动中初始化它,并通过其他活动使用此对象。

E.g。

Class Utiltiy {
  public static Facebook mFacebook;

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

您在主要活动的onCreate()

中调用Utility.initialize()

无论您需要进行Facebook API调用,都可以使用:

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

希望这有用。