我正在开发一个Android应用程序,为了让我保持登录功能,我使用的SharedPreferences应用程序开始崩溃。
这是我为首选项添加的行;
SharedPreferences pref = getApplicationContext().getSharedPreferences("RS_Remember" , getApplicationContext().MODE_PRIVATE);
我很确定这行会导致错误,因为如果删除它就可以正常工作。
我得到的错误信息说:
java.lang.Runtime:无法创建应用程序com.x.x.x:java.lang.NullPointerException。
我有什么想法,我会做什么?
修改
public Activity activity;
SharedPreferences pref;
private RSCurrentUserManager()
{
super();
pref = this.activity.getSharedPreferences("RallySpark_Remember",0);
}
+05-09 18:02:56.221: E/AndroidRuntime(31760): FATAL EXCEPTION: main
+05-09 18:02:56.221: E/AndroidRuntime(31760):
java.lang.RuntimeException: Unable to create application
com.x.x.general.RSApplication:
java.lang.NullPointerException
+05-09 18:02:56.221:
E/AndroidRuntime(31760): at
com.x.x.general.RSCurrentUserManager.<init>(RSCurrentUserManager.java:93)
+05-09 18:02:56.221: E/AndroidRuntime(31760): at com.x.x.general.RSCurrentUserManager.getInstance(RSCurrentUserManager.java:84)
我没有在任何其他方面使用共享偏好来找到问题我删除了所有东西以及它的定义
答案 0 :(得分:1)
如果您使用Activity
方法,那么您甚至不需要使用Context
。如果你不是或在内部阶级或听众内部,那么请重新编写
SharedPreferences pref = getApplicationContext().getSharedPreferences("RS_Remember" , getApplicationContext().MODE_PRIVATE);
与
SharedPreferences pref = ActivityName.this.getSharedPreferences("RS_Remember" , getApplicationContext().MODE_PRIVATE);
大多数情况下,您需要使用Activity context
代替Application context
。您可以在SO上找到许多关于这两个帖子的信息。我很确定这是你的问题但是如果不是那么请发布完整的logcat并显示你的代码中这一行的位置。
This SO answer对这两个
有一个很好的解释答案 1 :(得分:1)
您可以使用SharedPreferences,即
SharedPreferences preference=null;
@Override
protected void onCreate(Bundle arg0) {
preference= this.getSharedPreferences("RS_Remember", MODE_PRIVATE);
if(rememberMe.isChecked()){
SharedPreferences.Editor editor = preference.edit();
editor.putString("UserName", name.getText().toString());
editor.putString("Password", password.getText().toString());
// Commit the edits!
editor.commit();
}
}