Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/189.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用SharedReferences后Android崩溃_Android_Nullpointerexception_Sharedpreferences - Fatal编程技术网

使用SharedReferences后Android崩溃

使用SharedReferences后Android崩溃,android,nullpointerexception,sharedpreferences,Android,Nullpointerexception,Sharedpreferences,我正在开发一个Android应用程序,为了让我保持登录功能,我正在使用的SharedReferences应用程序开始崩溃 这是我为首选项添加的行 SharedPreferences pref = getApplicationContext().getSharedPreferences("RS_Remember" , getApplicationContext().MODE_PRIVATE); 我很确定这行代码会导致错误,因为如果我删除它,它会正常工作 我收到的错误消息是: java.lang.

我正在开发一个Android应用程序,为了让我保持登录功能,我正在使用的SharedReferences应用程序开始崩溃

这是我为首选项添加的行

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();


        }

}