SharedPreferences закрывает приложение
Я хочу читать и писать SharedPreferences
через класс, но когда я вызываю этот класс в своей деятельности, приложение закрывается / принудительно закрывается
Если CheckBox
"Запомнить электронную почту" проверено, приложение запомнит электронную почту.
мой LoginActivity
:
public class LoginActivity extends Activity
{
private AppPreferences appPreferences;
@Override
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_login);
appPreferences = new AppPreferences(); // this makes the app crash
String email = appPreferences.getPreferenceString("email");
// ...
класс appPreferences
public class AppPreferences extends Activity
{
private SharedPreferences settings = null;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
settings = this.getSharedPreferences(LOGIN_CREDENTIALS, MODE_PRIVATE);
}
public String getPreferenceString(String key) {
return settings.getString(key, DEFAULT_STRING);
}
public void setPreferenceString(String key, String value) {
editor.putString(key, (String) value);
}
// ...
Я искал несколько часов, чтобы исправить это, и я попробовал несколько решений от SO. Я называю getSharedPreferences
метод в onCreate
метод, чтобы не было проблемы.
Что я делаю неправильно? Я новичок в разработке Java и Android, поэтому, пожалуйста, опишите полностью с примерами. Другие решения с совершенно другим подходом тоже приветствуются. Заранее спасибо.
2 ответа
Потому что вы пытаетесь создать объект класса, который расширяет класс Activity. если AppPreferences не является классом Activity, тогда просто передайте текущий контекст Activity для разделения кода, связанного с SharedPreferences, в отдельный класс Java как:
public class AppPreferences
{
private SharedPreferences settings = null;
Context context;
public AppPreferences(Context context){
this.context=context;
settings = context.getSharedPreferences(LOGIN_CREDENTIALS, MODE_PRIVATE);
}
//your code here....
}
Теперь передайте контекст действия используя AppPreferences
конструктор как:
appPreferences = new AppPreferences(LoginActivity.this);
String email = appPreferences.getPreferenceString("email");
Не расширяйте класс Activity в AppPreferences. и удалите onCreate()
метод.
Делай так.
public class AppPreferences extends Activity
{
private SharedPreferences settings = null;
AppPreferences(Context context) {
settings = context.getSharedPreferences(LOGIN_CREDENTIALS, MODE_PRIVATE);
}
...//Rest of your code.
}
В логин активности.
appPreferences = new AppPreferences(this);