0

私はこのコードを持っています:

public static final String PREFS_NAME = "MyPrefsFile";

public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

settings = getSharedPreferences(PREFS_NAME, 0);
boolean hasLoggedIn = settings.getBoolean("hasLoggedIn", false);

    if (!((LoginButton.email).equals(""))) {

        //settings = getSharedPreferences(PREFS_NAME, 0);
        SharedPreferences.Editor editor = settings.edit();
        // Set "hasLoggedIn" to true
        editor.putBoolean("hasLoggedIn", true);
        // Commit the edits!
        editor.commit();
        Log.d("hasLoggedIn in email check = ", hasLoggedIn + "");
    }
}

if を入力した後でも、最後のログには hadLoggedIn が false として表示されます。

同じアクティビティのどこかで、正常に動作する同じ編集コードを取得しましたが、唯一の違いは、編集されるとすぐに使用したことがなく、アクティビティが再度呼び出されたときに使用したことです。

4

1 に答える 1

1

読むには、共有設定を再度開く必要があります。

hasLoggedInにはまだ古い値が含まれています。

以下のようにコードを更新しました。

public static final String PREFS_NAME = "MyPrefsFile";

public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

settings = getSharedPreferences(PREFS_NAME, 0);
boolean hasLoggedIn = settings.getBoolean("hasLoggedIn", false);

    if (!((LoginButton.email).equals(""))) {

        //settings = getSharedPreferences(PREFS_NAME, 0);
        SharedPreferences.Editor editor = settings.edit();
        // Set "hasLoggedIn" to true
        editor.putBoolean("hasLoggedIn", true);
        // Commit the edits!
        editor.commit();

        //You forgot write following line.
        hasLoggedIn = getSharedPreferences(PREFS_NAME, 0).getBoolean("hasLoggedIn", false); 
        Log.d("hasLoggedIn in email check = ", hasLoggedIn + "");
    }
}
于 2012-06-08T05:38:20.300 に答える