如何获得我的共享偏好?
我想在我的应用程序中做一个简单的Facebook登录,但是我收到了一些关于SharedPreferences的问题。如何获得我的共享偏好?
的想法是:在应用启动并进入到活动A,你登录并返回到A.它看到如果你登录,如果你不是那么它就会进入活动B
发生的事情是,当我在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();
}
看来t o我说你没有阅读A和B上的共享偏好文件。
getSharedPreferences(access_token, MODE_PRIVATE)
打开“access_token”共享偏好文件,应该使用文件名如getSharedPreferences("facebook_data", MODE_PRIVATE)
。
然后在活动B中,如果您按照登录Android的Facebook指南,它会使用活动sharedPreferences getPreferences(MODE_PRIVATE)
。这第二个返回一个首选项文件,只有活动B可以访问。我只是猜测这是因为我没有你的代码,也许你确定。
检查是否在两个活动上打开了相同的sharedPreferences文件。
当存储在ActivityB你的SharedPreferences,请确保调用commit()
保存偏好。
像这样:
SharedPreferences settings = getSharedPreferences(PREFS_NAME, 0);
SharedPreferences.Editor editor = settings.edit();
editor.putBoolean("loggedIn", isLoggedIn);
editor.commit();
我叫它。我认为问题不在B中,因为在B中它会自动进入A并显示注销按钮而不是登录名,所以看起来好像没有问题。 – 2012-08-16 21:54:20
@VictorDomingosSantiago你可以发布你如何存储吗?弄乱你的SharedPreferences的唯一方法就是使用错误的密钥。你正在调用onResume()中的SharedP()吗?从ActivityB回到ActivityA只会调用onResume()。 – 2012-08-16 22:24:24
我在B中发布我的代码。 – 2012-08-16 22:36:08
这应该是hepful。你必须更好地转化为您的情况是:
在答:
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();
问候
我用更多的代码编辑了我的帖子。我不认为我打电话给另一个共享偏好。 – 2012-08-17 02:28:43
在B中你做了'fbSP.edit()',但是你是如何初始化fbSP的? – nsemeniuk 2012-08-17 14:22:23
对不起,我没注意!谢谢,我忘记了我正在使用“getPreferences(MODE_PRIVATE)”而不是“getSharedPreferences(”facebook_data“,MODE_PRIVATE)”。一切都在工作,非常感谢你! – 2012-08-17 20:24:35