如何获得我的共享偏好?

问题描述:

我想在我的应用程序中做一个简单的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文件。

+0

我用更多的代码编辑了我的帖子。我不认为我打电话给另一个共享偏好。 – 2012-08-17 02:28:43

+0

在B中你做了'fbSP.edit()',但是你是如何初始化fbSP的? – nsemeniuk 2012-08-17 14:22:23

+0

对不起,我没注意!谢谢,我忘记了我正在使用“getPreferences(MODE_PRIVATE)”而不是“getSharedPreferences(”facebook_data“,MODE_PRIVATE)”。一切都在工作,非常感谢你! – 2012-08-17 20:24:35

当存储在ActivityB你的SharedPreferences,请确保调用commit()保存偏好。

像这样:

SharedPreferences settings = getSharedPreferences(PREFS_NAME, 0); 
     SharedPreferences.Editor editor = settings.edit(); 
editor.putBoolean("loggedIn", isLoggedIn); 
editor.commit(); 
+0

我叫它。我认为问题不在B中,因为在B中它会自动进入A并显示注销按钮而不是登录名,所以看起来好像没有问题。 – 2012-08-16 21:54:20

+0

@VictorDomingosSantiago你可以发布你如何存储吗?弄乱你的SharedPreferences的唯一方法就是使用错误的密钥。你正在调用onResume()中的SharedP()吗?从ActivityB回到ActivityA只会调用onResume()。 – 2012-08-16 22:24:24

+0

我在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(); 

问候