我正在尝试在我的应用中进行简单的Facebook登录,但我对SharedPreferences有一些疑问。
想法是应用程序启动并转到活动A,它会看到您是否已登录,如果您不是,则会将您发送到活动B,您登录并返回到A.
发生的事情是,当我登录B时,它会将我发回A,但是A似乎没有加载我的SharedPreferences并将我发回给B,我进入了循环。
这是我在A中的代码。
public static String access_token = null;
long expires;
...
private void SharedP() {
// TODO Auto-generated method stub
prefs = getSharedPreferences(access_token, MODE_PRIVATE);
access_token = prefs.getString("access_token", null);
expires = prefs.getLong("access_expires", 0);
if (access_token == null && expires == 0) { //If it's not logged...
Intent login = new Intent("android.intent.action.FACEBOOKLOGIN");
startActivity(login);
}
}
我做错了什么?我该怎么办?
我的代码在B:
public void onComplete(Bundle values) {
// TODO Auto-generated method stub
Editor edit = fbSP.edit();
edit.putString("access_token", fb.getAccessToken());
edit.putLong("access_expires", fb.getAccessExpires());
edit.commit();
UpdateLoginImage();
BackToA();
}
答案 0 :(得分:1)
在ActivityB中存储SharedPreferences时,请务必致电commit()
以保存首选项。
像这样:
SharedPreferences settings = getSharedPreferences(PREFS_NAME, 0);
SharedPreferences.Editor editor = settings.edit();
editor.putBoolean("loggedIn", isLoggedIn);
editor.commit();
答案 1 :(得分:0)
这应该是有益的。您必须将此更好地转换为您的情况:
在A:
private boolean isLogged;
// Check if the user is logged
SharedPreferences settings = getSharedPreferences(SETTINGS_FILENAME, MODE_PRIVATE);
isLogged= settings.getBoolean("isLogged", false);
...然后比较:
if (!isLogged) {
Intent intent = new Intent();
intent.setClass(A.this, B.class);
startActivity(intent);
} else {
// Do anything
}
在B:
// ... after login
SharedPreferences settings = getSharedPreferences(SETTINGS_FILENAME, MODE_PRIVATE);
SharedPreferences.Editor editor = settings.edit();
editor.putBoolean("isLogged", true);
editor.commit();
最好的问候
答案 2 :(得分:0)
在我看来,你没有在A和B上阅读相同的共享偏好。
getSharedPreferences(access_token, MODE_PRIVATE)
打开“access_token”共享偏好设置文件,您应该使用getSharedPreferences("facebook_data", MODE_PRIVATE)
这样的文件名。
然后在活动B中,如果您在登录Android时遵循Facebook指南,它将使用活动sharedPreferences getPreferences(MODE_PRIVATE)
。第二个返回一个只能访问活动B的首选项文件。我只是猜测这个,因为我没有你的代码,也许你没那么好。
检查您是否在两个活动上打开相同的sharedPreferences文件。