Почему в SharedPreferences не сохранаются данные?
Делаю учебное приложение (менеджер паролей). При первичном запуске приложения должен запрашиваться мастер пароль и, далее, при выгрузке приложения из памяти и открытии заново ожидается, что будет запрашиваться пароль и сравниваться с мастер паролем.
Мастер пароль хочу записывать в SharedPreferences и туда же записывать пароль для сравнения. Потом в методе onDestroy обычный пароль удалять
Но сейчас у меня почему-то все сохраняется, до закрытия приложения и выгрузки его из памяти (не удаления)
Вывод в консоль такой:
2024-08-28 13:49:47.240 27569-27569 testing_FirstRun_onResume_key_1 ru.wizand.passwordmanager I
2024-08-28 13:49:47.240 27569-27569 testing_FirstRun_onResume_userPass_1 ru.wizand.passwordmanager I
2024-08-28 13:49:47.275 27569-27569 testing_FirstRun_onResume_key_2 ru.wizand.passwordmanager I
2024-08-28 13:49:47.275 27569-27569 testing_FirstRun_onResume_userPass_2 ru.wizand.passwordmanager I
2024-08-28 13:49:47.275 27569-27569 testing_onResume_key_fromXML ru.wizand.passwordmanager I
2024-08-28 13:49:47.275 27569-27569 testing_onResume_pass_fromXML ru.wizand.passwordmanager I
2024-08-28 13:49:47.275 27569-27569 testing_Equals ru.wizand.passwordmanager I false
2024-08-28 13:49:47.275 27569-27569 testing_stringIsNotEmpty ru.wizand.passwordmanager I false
2024-08-28 13:49:47.275 27569-27569 testing_isAuth ru.wizand.passwordmanager I false
2024-08-28 13:50:02.532 27569-27569 testing_onPause_key_masterKey ru.wizand.passwordmanager I 1HVX2Kamebuc8nx45PIcig==:T6zUv1XMjkitOKO+ayTPWKYX/TLcLtnfRFWtAtsTaLE=
2024-08-28 13:50:02.532 27569-27569 testing_onPause_key_userPass ru.wizand.passwordmanager I
2024-08-28 13:50:02.532 27569-27569 testing_onPause_key_fromXML ru.wizand.passwordmanager I
2024-08-28 13:50:02.532 27569-27569 testing_onPause_pass_fromXML ru.wizand.passwordmanager I
2024-08-28 13:50:02.532 27569-27569 testing_isAuth ru.wizand.passwordmanager I true
2024-08-28 13:50:02.572 27569-27569 testing_onStop_key_masterKey ru.wizand.passwordmanager I 1HVX2Kamebuc8nx45PIcig==:T6zUv1XMjkitOKO+ayTPWKYX/TLcLtnfRFWtAtsTaLE=
2024-08-28 13:50:02.572 27569-27569 testing_onStop_key_userPass ru.wizand.passwordmanager I
2024-08-28 13:50:02.572 27569-27569 testing_onStop_key_fromXML ru.wizand.passwordmanager I
2024-08-28 13:50:02.572 27569-27569 testing_onStop_pass_fromXML ru.wizand.passwordmanager I
2024-08-28 13:50:09.462 27569-27569 testing_onResume_key_fromXML ru.wizand.passwordmanager I
2024-08-28 13:50:09.462 27569-27569 testing_onResume_pass_fromXML ru.wizand.passwordmanager I
private String masterPassText;
private String masterEncryptKey;
boolean isAuthorization;
SharedPreferences prefs;
private String userPassText;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
prefs = getSharedPreferences("ru.wizand.passwordmanager", MODE_PRIVATE);
}
@Override
protected void onResume() {
super.onResume();
masterEncryptKey = "";
userPassText = "";
// Fetching the stored data from the SharedPreference
if (prefs.getBoolean("firstrun", true)) {
// При первом запуске (или если юзер удалял все данные приложения)
// мы попадаем сюда. Делаем что-то
//и после действия записывам false в переменную firstrun
//Итого при следующих запусках этот код не вызывается.
Log.i("testing_FirstRun_onResume_key_1", masterEncryptKey);
Log.i("testing_FirstRun_onResume_userPass_1", userPassText);
setupMasterPass();
prefs.edit().putBoolean("firstrun", false).apply();
userPassText = masterEncryptKey;
Log.i("testing_FirstRun_onResume_key_2", masterEncryptKey);
Log.i("testing_FirstRun_onResume_userPass_2", userPassText);
// write all the data entered by the user in SharedPreference and apply
prefs.edit().putString("key", masterEncryptKey).apply();
prefs.edit().putString("userPassText", userPassText).apply();
}
else {
if (!isAuthorization) {
checkMasterPass();
Log.i("testing_input_userPassText", userPassText);
prefs.edit().putString("testing_input_userPassText", userPassText).apply();
}
}
String passShared = prefs.getString("userPassText", "");
String keyShared = prefs.getString("key", "");
Log.i("testing_onResume_key_fromXML", keyShared);
Log.i("testing_onResume_pass_fromXML", passShared);
boolean equals = userPassText.equals(masterPassText);
Log.i("testing_Equals", Boolean.toString(equals));
boolean stringIsNotEmpty = passShared != null && !keyShared.isEmpty();
Log.i("testing_stringIsNotEmpty", Boolean.toString(stringIsNotEmpty));
Log.i("testing_isAuth", Boolean.toString(isAuthorization));
}
@Override
protected void onPause() {
super.onPause();
Log.i("testing_onPause_key_masterKey", masterEncryptKey);
Log.i("testing_onPause_key_userPass", userPassText);
String passShared = prefs.getString("userPassText", "");
String keyShared = prefs.getString("key", "");
Log.i("testing_onPause_key_fromXML", keyShared);
Log.i("testing_onPause_pass_fromXML", passShared);
}
@Override
protected void onDestroy() {
super.onDestroy();
isAuthorization = false;
Log.i("testing_onDestroy_key_masterKey", masterEncryptKey);
Log.i("testing_onDestroy_key_userPass", userPassText);
userPassText = "";
prefs.edit().putString("userPassText", userPassText).apply();
String passShared = prefs.getString("userPassText", "");
String keyShared = prefs.getString("key", "");
Log.i("testing_onDestroy_key_fromXML", keyShared);
Log.i("testing_onDestroy_pass_fromXML", passShared);
}
private void checkMasterPass() {
// First running app and encryption the MASTERPASSWORD
AlertDialog.Builder masterpassBuilder = new AlertDialog.Builder(this);
masterpassBuilder.setTitle("Enter your Password");
//Set up the input
final EditText inputMaster = new EditText(this);
inputMaster.setInputType(InputType.TYPE_TEXT_VARIATION_PASSWORD);
masterpassBuilder.setView(inputMaster);
userPassText = inputMaster.getText().toString();
isAuthorization = userPassText.equals(masterPassText);
//Set up the buttons
masterpassBuilder.setPositiveButton("OK", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
//Checking the input and master password
popupMessage(masterEncryptKey, userPassText);
}
});
masterpassBuilder.show();
}
private void setupMasterPass() {
// First running app and encryption the MASTERPASSWORD
AlertDialog.Builder masterpassBuilder = new AlertDialog.Builder(this);
masterpassBuilder.setTitle("Enter Master Password");
//Set up the input
final EditText inputMaster = new EditText(this);
inputMaster.setInputType(InputType.TYPE_TEXT_VARIATION_PASSWORD);
masterpassBuilder.setView(inputMaster);
//Set up the buttons
masterpassBuilder.setPositiveButton("OK", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
masterPassText = inputMaster.getText().toString();
isMasterPass = true;
isAuthorization = true;
String key = encryptString(masterPassText);
popupMessage(masterPassText, key);
masterEncryptKey = key;
}
});
masterpassBuilder.show();
}