SharedPreferences使应用程序强制关闭
我想读,并通过一类写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尝试了几种解决方案。我确实在onCreate
方法中调用getSharedPreferences
方法,所以不会成为问题。
我在做什么错?我不熟悉Java和Android开发,所以请充分描述示例。采用完全不同方法的其他解决方案也受到欢迎。提前致谢。
因为您正在尝试创建一个扩展Activity类的对象。如果AppPreferences是非活动类,那么刚刚通过当前活动的上下文中单独的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");
完美!感谢这工作,谢谢你的解释了。现在唯一的办法是,如果我强迫关闭应用程序,电子邮件不记得..你知道如何? – Dediqated 2013-03-07 08:23:56
不要在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);
您的解决方案也可以运作,但我不知道如果我只使用首选 – Dediqated 2013-03-07 09:11:03
请出示您的LogCat。你有什么样的错误? – hakiko 2013-03-06 16:08:37
@Dediqated你试过我的解决方案..并仍然错误发布logcat。 – 2013-03-06 16:55:42