我想通过一个类来读写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开发的新手,所以请完整地描述一些示例。其他采用完全不同方法的解决方案也是受欢迎的。提前谢谢。
答案 0 :(得分: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);
答案 1 :(得分:1)
因为您正在尝试创建一个扩展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
构造函数将活动上下文传递为:
appPreferences = new AppPreferences(LoginActivity.this);
String email = appPreferences.getPreferenceString("email");