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

これは大げさなはずです。これを自分の状況にうまく変換する必要があります。

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

よろしくお願いします

于 2012-08-16T21:45:05.090 に答える
0

あなたはAとBで同じ共有設定を読んでいないようです。

getSharedPreferences(access_token, MODE_PRIVATE)「access_token」共有設定ファイルを開きます。のようなファイル名を使用する必要がありますgetSharedPreferences("facebook_data", MODE_PRIVATE)

次に、アクティビティBで、Androidのログインに関するFacebookガイドに従うと、アクティビティsharedPreferencesが使用されますgetPreferences(MODE_PRIVATE)。この2つ目は、アクティビティBにのみアクセス可能な設定ファイルを返します。コードがないため、これを推測しています。おそらく問題ありません。

両方のアクティビティで同じsharedPreferencesファイルを開いているかどうかを確認してください。

于 2012-08-16T22:02:57.913 に答える