0

我想通过一个类来读写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 开发的新手,所以请用示例充分描述。也欢迎其他采用完全不同方法的解决方案。提前致谢。

4

2 回答 2

1

不要在 AppPreferences 中扩展 Activity 类。并删除该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);
于 2013-03-06T15:55:51.043 回答
1

因为您正在尝试创建一个扩展 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现在使用构造函数传递 Activity 上下文:

appPreferences = new AppPreferences(LoginActivity.this);
String email = appPreferences.getPreferenceString("email");
于 2013-03-06T15:56:54.537 回答