0

我正在尝试在我的应用程序中进行简单的 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();
            }
4

3 回答 3

1

当您将 SharedPreferences 存储在 ActivityB 中时,请确保调用commit()以保存首选项。

像这样:

SharedPreferences settings = getSharedPreferences(PREFS_NAME, 0);
      SharedPreferences.Editor editor = settings.edit();
editor.putBoolean("loggedIn", isLoggedIn);
editor.commit();
于 2012-08-16T21:20:22.723 回答
0

这应该是有益的。您必须更好地将其转换为您的情况:

在一个:

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-16T21:45:05.090 回答
0

在我看来,您在 A 和 B 上没有阅读相同的共享偏好。

getSharedPreferences(access_token, MODE_PRIVATE)打开一个“access_token”共享首选项文件,您应该使用类似getSharedPreferences("facebook_data", MODE_PRIVATE).

然后在活动 B 中,如果您遵循 Facebook 的 Android 登录指南,它会使用活动 sharedPreferences getPreferences(MODE_PRIVATE)。第二个返回一个仅可用于活动 B 的首选项文件。我只是猜测这是因为我没有您的代码,也许您没问题。

检查您是否在两个活动上打开相同的 sharedPreferences 文件。

于 2012-08-16T22:02:57.913 回答