У меня есть форма для входа с флажком, чтобы приложение могло запомнить письмо в LoginActivity
. Если я нажму кнопку «Вход», электронное письмо должно быть сохранено в SharedPreferences
, используя класс AppPreferences
.SharedPreferences не сохраняет силу закрыть приложение
Приложение запоминает письмо, если я вернусь на главный экран, нажав кнопку «домой» и нажав клавишу «назад».
Но если я принудительно закрываю приложение, отображается значение по умолчанию, определенное в методе Preferencemanager.getString("value", "default_value");
.
Я пробовал много вещей, которые люди предлагали на SO, но, к сожалению, ни одно из решений не работало. Я даже пытался его решить, поставив все код SharedPreferences
в отдельный класс (см. this question).
Ниже я поставил столько же кода, что и вопрос. Таким образом, оба класса LoginActivity
и AppPreferences
. Сообщение об ошибке отсутствует в LogCat.
На обоих устройствах Samsung I9100 и P3110 с Android 4.2.2 Cyanogenmod 10.1 и нескольких разных эмуляторах возникает эта проблема. (Я прочитал некоторые Samsung S устройств с Honeycomb could't сохранить SharedPreferences правильно?)
EDIT: Как я забыл упомянуть, что проект нацелен на API 17 и minSdkVersion = 11. Только я сохранить учетные данные при нажатии кнопки «Вход».
EDIT 2: Эта проблема также возникает, если телефон перезагружается
LoginActivity
класс:
public class LoginActivity extends Activity
{
private static final String PREF_REMEMBER_EMAIL = "LoginCredentialsRememberEmail";
private static final String PREF_EMAIL = "LoginCredentialsEmail";
private String mEmail;
private EditText mEmailView;
private CheckBox cbRememberEmail;
private AppPreferences appPreferences;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_login);
appPreferences = new AppPreferences(LoginActivity.this);
loadUserCredentials();
}
@Override
protected void onResume() {
super.onResume();
loadUserCredentials();
}
@Override
protected void onStart() {
super.onStart();
loadUserCredentials();
}
private void loadUserCredentials() {
String rememberEmail = appPreferences.getPreferenceString(PREF_REMEMBER_EMAIL);
String email = appPreferences.getPreferenceString(PREF_EMAIL);
mEmailView = (EditText) findViewById(R.id.email);
mEmailView.setText((rememberEmail == "1") ? email : "");
cbRememberEmail = (CheckBox) findViewById(R.id.cbRememberEmail);
cbRememberEmail.setChecked(rememberEmail == "1" ? true : false);
mEmail = mPassword = "";
}
private void saveUserCredentials() {
try {
String rememberemail = (((CheckBox) findViewById(R.id.cbRememberEmail)).isChecked()) ? "1" : "0";
appPreferences.setPreferenceString(PREF_REMEMBER_EMAIL, rememberemail);
String email = (rememberemail == "1") ? mEmail : "";
appPreferences.setPreferenceString(PREF_EMAIL, email);
}
public void cbRememberEmailClick(View view) {
boolean checked = ((CheckBox) findViewById(R.id.cbRememberEmail)).isChecked();
if (checked) {
new AlertDialog.Builder(this).setTitle(R.string.remember_email_notification_title).setMessage(R.string.remember_email_notification_message).setPositiveButton(R.string.yes, new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int which) {
((CheckBox) findViewById(R.id.cbRememberEmail)).setChecked(true);
}
}).setNegativeButton(R.string.no, new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int which) {
((CheckBox) findViewById(R.id.cbRememberEmail)).setChecked(false);
}
}).show();
}
}
// ...
}
AppPreferences
класс:
public class AppPreferences {
Context context;
private SharedPreferences settings = null;
private static String LOGIN_CREDENTIALS = "com.example.login.credentials";
private static String DEFAULT_STRING = "";
public AppPreferences(Context context) {
this.context = context;
settings = PreferenceManager.getDefaultSharedPreferences(context);
}
private String getKey(String key) {
return LOGIN_CREDENTIALS + "." + key;
}
public String getPreferenceString(String key) {
return settings.getString(getKey(key), DEFAULT_STRING);
}
public void setPreferenceString(String key, String value) throws Exception {
SharedPreferences.Editor editor = settings.edit();
editor.putString(getKey(key), (String) value);
editor.commit();
}
// ...
}
Любая помощь будет очень ценна, я «Я задерживался на этом в течение нескольких дней, и это действительно расстраивает сейчас.
Заранее спасибо.
Dediqated
'onDestroy' не будет t, когда фоновое приложение закрыто принудительно. –
Я только хочу сохранить учетные данные при нажатии кнопки входа в систему – Dediqated