2

「Sam's Tech Yourself Android Application Development in 24 Hours」に取り組んでいますが、ある時点でニックネームと電子メールの設定が正しく保存されなくなりました。ニックネームをまったく保存せず、メールを両方に保存するようになりました。これを引き起こすために何をしましたか、どうすれば修正できますか?

これらはコードの関連領域だと思いますが、さらに必要な場合はお問い合わせください。私が知る限り、これはまだ本のコードであり、以前は機能していました。もしかしてどこかのタイプミス?

public class QuizActivity extends Activity {
public static final String GAME_PREFERENCES = "GamePrefs"; 
public static final String GAME_PREFERENCES_NICKNAME = null; //String
public static final String GAME_PREFERENCES_EMAIL = null; //String

@Override
protected void onPause() {
    super.onPause();

    EditText nicknameText = (EditText) findViewById(R.id.EditText_Nickname);
    EditText emailText = (EditText) findViewById(R.id.EditText_Email);

    String strNickname = nicknameText.getText().toString();
    String strEmail = emailText.getText().toString();

    // TODO: fix password and email saving and displaying improperly
    Editor editor = mGameSettings.edit();
    editor.putString(GAME_PREFERENCES_NICKNAME, strNickname);
    editor.putString(GAME_PREFERENCES_EMAIL, strEmail);
    editor.commit();

    Toast.makeText(QuizSettingsActivity.this, R.string.settings_saved,
            Toast.LENGTH_SHORT).show();

}

public void initNicknameEntry() {
    EditText nicknameText = (EditText) findViewById(R.id.EditText_Nickname);
    if (mGameSettings.contains(GAME_PREFERENCES_NICKNAME)) {
        nicknameText.setText(mGameSettings.getString(
                GAME_PREFERENCES_NICKNAME, ""));
    }
}

public void initEmailEntry() {
    EditText emailText = (EditText) findViewById(R.id.EditText_Email);
    if (mGameSettings.contains(GAME_PREFERENCES_EMAIL)) {
        emailText.setText(mGameSettings.getString(GAME_PREFERENCES_EMAIL,
                ""));
    }
}
4

1 に答える 1

1

これらを個別の値に初期化する必要があります。

public static final String GAME_PREFERENCES_NICKNAME = "Nickname"; //String
public static final String GAME_PREFERENCES_EMAIL = "Email"; //String

そうしないと、SharedPreferences は 2 つのキーを区別できず、最初に見つかったキーを常に返します。

于 2012-11-15T18:01:56.570 に答える