android - SharedPreferences使应用程序强制关闭

标签 android crash sharedpreferences forceclose

我想通过一个类读写SharedPreferences,但是当我在Activity中调用该类时,它会使应用崩溃/强制关闭

如果选中了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开发的新手,因此请通过示例充分描述。也欢迎采用完全不同的方法的其他解决方案。提前致谢。

最佳答案

因为您正在尝试创建扩展Activity类的类的对象。如果AppPreferences是非Activity类,则只需传递当前Activity上下文,以在单独的Java类中将与SharedPreferences相关的代码分离为:

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构造函数传递Activity上下文:
appPreferences = new AppPreferences(LoginActivity.this);
String email = appPreferences.getPreferenceString("email");

关于android - SharedPreferences使应用程序强制关闭,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15251942/

相关文章:

android - 使用带有 minifyEnabled 的 SimpleXML 的应用程序不起作用

ios - ARC在Apple的UI库中的某个地方释放了我的对象

java - 如何按输入顺序保存和检索共享首选项中的数据?

Android 原生崩溃

android - onSharedPreferenceChanged 是否总是在 UI 线程上调用

android - 在 SharedPreferences 中存储列表或集合

android - 在我的 ListView 上方对齐列标题

android - java.lang.NullPointerException in doInBackground put HashMap in ArrayList

java - 如何在android中点击自定义Gridview?

Android AIDL : Project crash after change code to kotlin from java