我想通过一个类读写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/