我在添加值和获取存储的值方面做了诸如此类的sharedpreference方法,因为我还将在另一个类中使用它来更新值。
public static void addPass(String key, String value, Context context) {
SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(context);
SharedPreferences.Editor editor = prefs.edit();
editor.putString(key, value);
editor.commit();
}
public static String getPass(String key, Context context) {
SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(context);
return preferences.getString(key, null);
}
我想使用sharedpreference的空值,所以我做了这样的代码
password = getPass("name", null);
if ((password.equals(""))){
if (s.toString().equals("1234")) {
Intent Menu = new Intent(LogIn.this, Menu.class);
LogIn.this.startActivity(Menu);
} else {
Toast.makeText(LogIn.this, "Incorrect Password", Toast.LENGTH_SHORT).show();
}
}
else {
realpass = getPass("password", LogIn.this);
if (s.toString().equals(realpass)) {
Intent Menu = new Intent(LogIn.this, Menu.class);
LogIn.this.startActivity(Menu);
} else {
Toast.makeText(LogIn.this, "Incorrect Password", Toast.LENGTH_SHORT).show();
}
}
如果密码为空,则用户应输入1234作为密码,否则,用户将在sharedpreference中存储的内容设置为密码。
但是使用这个我会得到这样的错误:
02-06 18:25:25.267 2044-2044/com.secsys.gagacamaso.gagacamaso E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.secsys.gagacamaso.gagacamaso, PID: 2044
java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.String android.content.Context.getPackageName()' on a null object reference
at android.preference.PreferenceManager.getDefaultSharedPreferencesName(PreferenceManager.java:375)
at android.preference.PreferenceManager.getDefaultSharedPreferences(PreferenceManager.java:370)
at com.secsys.gagacamaso.gagacamaso.LogIn.getPass(LogIn.java:195)
at com.secsys.gagacamaso.gagacamaso.LogIn$1.onTextChanged(LogIn.java:55)
at android.widget.TextView.sendOnTextChanged(TextView.java:7991)
at android.widget.TextView.setText(TextView.java:4345)
at android.widget.TextView.setText(TextView.java:4199)
at android.widget.EditText.setText(EditText.java:84)
at android.widget.TextView.setText(TextView.java:4174)
at com.secsys.gagacamaso.gagacamaso.LogIn$6.onClick(LogIn.java:136)
at android.view.View.performClick(View.java:5198)
at android.view.View$PerformClick.run(View.java:21147)
at android.os.Handler.handleCallback(Handler.java:739)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:148)
at android.app.ActivityThread.main(ActivityThread.java:5417)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)
195行是这样的:
SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(context);
第55行是这样的:
password = getPass("name", null);
非常感谢任何愿意尝试帮助我的人,一直在努力弄清楚如何使用默认值并全天更新并存储密码
编辑部分
我能够将默认密码设置为1234,但是当我尝试更改密码时,我仍然获得1234作为密码,这是我来自另一个类的代码,另一个类名为LogIn.java。
Menu.java
ok.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
String oldpassword = oldpass.getText().toString();
String newpassword = newpass.getText().toString();
if (LogIn.password.equals("")) {
if (oldpassword.toString().equals("1234")) {
login.getPass("password",Menu.this);
login.addPass("password",newpassword,getApplicationContext());
Toast.makeText(Menu.this,"New password saved!",Toast.LENGTH_SHORT).show();
}
else {
Toast.makeText(Menu.this,"Old Password is not correct",Toast.LENGTH_SHORT).show();
}
}
else {
if (oldpassword.equals(LogIn.realpass)){
login.getPass("password",Menu.this);
login.addPass("password", newpassword, getApplicationContext());
Toast.makeText(Menu.this,"New password saved!",Toast.LENGTH_SHORT).show();
}
else{
Toast.makeText(Menu.this,"Old Password is not correct",Toast.LENGTH_SHORT).show();
}
}
}
});
最佳答案
这是因为要将空Context
传递给getPass方法。
password = getPass("name", null); // <-- Null Context
因此,以下代码将崩溃,如stacktrace中所示:
SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(context); // <-- Null Context
向其发送适当的应用程序
Context
,它将起作用。此外,要获得所需的内容,可以在
getPass
方法中使用如下所示的getString:preferences.getString(key, "");
如果首选项不存在,它将得到一个空字符串,并且您的代码将在与空字符串进行比较时正常工作。
关于android - 如何在Android中获取SharedPreference的null值,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/35244784/