使用SharedReferences后Android崩溃
我正在开发一个Android应用程序,为了让我保持登录功能,我正在使用的SharedReferences应用程序开始崩溃 这是我为首选项添加的行使用SharedReferences后Android崩溃,android,nullpointerexception,sharedpreferences,Android,Nullpointerexception,Sharedpreferences,我正在开发一个Android应用程序,为了让我保持登录功能,我正在使用的SharedReferences应用程序开始崩溃 这是我为首选项添加的行 SharedPreferences pref = getApplicationContext().getSharedPreferences("RS_Remember" , getApplicationContext().MODE_PRIVATE); 我很确定这行代码会导致错误,因为如果我删除它,它会正常工作 我收到的错误消息是: java.lang.
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)
公共活动;
共享参考优先;
私有RSCurrentUserManager()
{
超级();
pref=this.activity.getSharedReferences(“RallySpark_remote”,0);
}
+05-09 18:02:56.221:E/AndroidRuntime(31760):致命异常:主
+05-09 18:02:56.221:E/AndroidRuntime(31760):
java.lang.RuntimeException:无法创建应用程序
com.x.x.general.rs应用程序:
java.lang.NullPointerException
+05-09 18:02:56.221:
E/AndroidRuntime(31760):在
RSCurrentUserManager(RSCurrentUserManager.java:93)
+05-09 18:02:56.221:E/AndroidRuntime(31760):位于com.x.x.general.RSCurrentUserManager.getInstance(RSCurrentUserManager.java:84)
我没有在任何其他地方使用共享首选项来查找问题,我删除了所有内容执行其定义如果您在
活动
方法中,那么您甚至不需要使用上下文
。如果您不在或不在内部类或侦听器中,请回答
SharedPreferences pref = getApplicationContext().getSharedPreferences("RS_Remember" , getApplicationContext().MODE_PRIVATE);
与
大多数情况下,您都希望使用活动上下文
,而不是应用程序上下文
。你可以找到很多关于这两个方面的信息。我很确定这是您的问题,但如果不是,请发布完整的logcat并显示这一行在代码中的位置
对这两个问题有很好的解释。您可以使用SharedReference,即
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();
}
}
尝试用您的
活动上下文替换getApplicationCOntext()
,getApplicationCOntext()是否返回空值?不要使用getApplicationCOntext()
只使用上下文变量,您需要从活动传递上下文变量context.getSharedReferences()
知道我该怎么做吗?对您应该读取崩溃时在日志中创建的堆栈跟踪。此跟踪将为您指出可能的故障点。如果你在那之后还需要帮助,发布跟踪和相关代码。我已经尝试过使用Activit上下文,但没有帮助。为了了解getApplicationContext()是否为null,我将代码替换为if(getApplicationContext()!=null){pref=getApplicationContext().GetSharedReferences(“RS_记住,getApplicationContext().MODE_PRIVATE);}
它仍然没有像你告诉我的那样工作,我不在活动类中,这就是我之前尝试的活动;SharedReferences pref=activity.getSharedReferences(“RS\u记住”,activity.getApplicationContext().MODE\u PRIVATE)代码>它给了我同样的结果。我尝试了你编写的代码,但仍然无效。请将此
传递给你尝试使用它的类,并将其分配给上下文
变量,然后改用该变量。如果这不起作用,那么请“发布完整的日志并显示您在哪里调用它”,该类的第93行是什么?此外,您似乎没有为活动分配任何内容
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();
}
}