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);
Другие вопросы по тегам