我正在使用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());
}
}
答案 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(....)。
希望这有用。