Android 显示NullPointerException的共享首选项,即使代码正确
我正在使用SharedReferences进行简单的登录和注销会话。但是,我得到了这个错误: 致命异常:主 流程:com.chayan.jecrcuniversity,PID:16940 java.lang.NullPointerException:尝试调用接口方法 'android.content.SharedReferences$Editor 空对象引用上的android.content.SharedReferences.edit() 在 com.chayan.jecrcuniversity.StudentLogin$1.onClick(StudentLogin.java:40) 这是我的活动代码:Android 显示NullPointerException的共享首选项,即使代码正确,android,android-studio,Android,Android Studio,我正在使用SharedReferences进行简单的登录和注销会话。但是,我得到了这个错误: 致命异常:主 流程:com.chayan.jecrcuniversity,PID:16940 java.lang.NullPointerException:尝试调用接口方法 'android.content.SharedReferences$Editor 空对象引用上的android.content.SharedReferences.edit() 在 com.chayan.jecrcuniversity
public class StudentLogin extends AppCompatActivity {
Button submit;
EditText un,pass;
public static final String MyPREFERENCES = "MyPrefs" ;
public static final String Username = "unameKey";
public static final String Password = "passKey";
//public static final String Email = "emailKey";
SharedPreferences sharedpreferences;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.login);
un=(EditText)findViewById(R.id.editText4);
pass=(EditText)findViewById(R.id.editText6);
submit=(Button)findViewById(R.id.button6);
sharedpreferences = getSharedPreferences(MyPREFERENCES, Context.MODE_PRIVATE);
submit.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
String username=un.getText().toString();
String password=pass.getText().toString();
SharedPreferences.Editor editor = sharedpreferences.edit();
editor.putString(Username, username);
editor.putString(Password, password);
editor.apply();
startActivity(new Intent(StudentLogin.this,MainActivity.class));
Toast.makeText(StudentLogin.this,"Welcome, "+un.getText().toString(),Toast.LENGTH_LONG).show();
}
});
}
}
如果您对上述方法有疑问,请尝试使用PreferenceManager类 要在SharedReferences中保存名称,请执行以下操作:
SharedPreferences sharedPreferences = PreferenceManager
.getDefaultSharedPreferences(this);
Editor editor = sharedPreferences.edit();
editor.putString(key, name);
editor.apply();
SharedPreferences sharedPreferences = PreferenceManager
.getDefaultSharedPreferences(this);
String name = sharedPreferences.getString(key, "default value");
要从SharedReferences获取名称,请执行以下操作:
SharedPreferences sharedPreferences = PreferenceManager
.getDefaultSharedPreferences(this);
Editor editor = sharedPreferences.edit();
editor.putString(key, name);
editor.apply();
SharedPreferences sharedPreferences = PreferenceManager
.getDefaultSharedPreferences(this);
String name = sharedPreferences.getString(key, "default value");
如果您对上述方法有疑问,请尝试使用PreferenceManager类 要在SharedReferences中保存名称,请执行以下操作:
SharedPreferences sharedPreferences = PreferenceManager
.getDefaultSharedPreferences(this);
Editor editor = sharedPreferences.edit();
editor.putString(key, name);
editor.apply();
SharedPreferences sharedPreferences = PreferenceManager
.getDefaultSharedPreferences(this);
String name = sharedPreferences.getString(key, "default value");
要从SharedReferences获取名称,请执行以下操作:
SharedPreferences sharedPreferences = PreferenceManager
.getDefaultSharedPreferences(this);
Editor editor = sharedPreferences.edit();
editor.putString(key, name);
editor.apply();
SharedPreferences sharedPreferences = PreferenceManager
.getDefaultSharedPreferences(this);
String name = sharedPreferences.getString(key, "default value");
使用这两种方法保存共享首选项并从中获取值
public void savePreferences(Context context,
String key, String value) {
SharedPreferences sharedPreferences = PreferenceManager
.getDefaultSharedPreferences(context);
SharedPreferences.Editor editor = sharedPreferences.edit();
editor.putString(key, value);
editor.commit();
}
要从SharedReferences
获取值,请使用以下方法:
public String getPreferences(Context context, String prefKey) {
SharedPreferences sharedPreferences = PreferenceManager
.getDefaultSharedPreferences(context);
return sharedPreferences.getString(prefKey, "");
}
编辑:如何使用:
要保存值,请使用以下行:
savePreferences(getApplicationContext(),"KEY","THIS_IS VALUE");
getPreferences(getApplicationContext(),"KEY");
要获取值,请使用以下行:
savePreferences(getApplicationContext(),"KEY","THIS_IS VALUE");
getPreferences(getApplicationContext(),"KEY");
使用这两种方法保存共享首选项并从中获取值
public void savePreferences(Context context,
String key, String value) {
SharedPreferences sharedPreferences = PreferenceManager
.getDefaultSharedPreferences(context);
SharedPreferences.Editor editor = sharedPreferences.edit();
editor.putString(key, value);
editor.commit();
}
要从SharedReferences
获取值,请使用以下方法:
public String getPreferences(Context context, String prefKey) {
SharedPreferences sharedPreferences = PreferenceManager
.getDefaultSharedPreferences(context);
return sharedPreferences.getString(prefKey, "");
}
编辑:如何使用:
要保存值,请使用以下行:
savePreferences(getApplicationContext(),"KEY","THIS_IS VALUE");
getPreferences(getApplicationContext(),"KEY");
要获取值,请使用以下行:
savePreferences(getApplicationContext(),"KEY","THIS_IS VALUE");
getPreferences(getApplicationContext(),"KEY");
getSharedReferences(MyPREFERENCES,Context.MODE\u PRIVATE)
返回null如果您的问题上没有复制/粘贴错误,我看不出出现此问题的原因。您的SharedReference是在onCreate()之后创建的,onCreate()是它的正确位置。您使用的是原始ROM还是自定义ROM?请卸载您的应用程序,然后重新安装…可能您做了一些更改,但这些更改在新建筑之后没有被接管。GetSharedReferences(MyPREFERENCES,Context.MODE\u PRIVATE)
返回null如果您的问题上没有复制/粘贴错误,我看不出出现此问题的原因。您的SharedReference是在onCreate()之后创建的,onCreate()是它的正确位置。你使用的是原始ROM还是自定义ROM?请卸载你的应用程序,然后重新安装…也许你做了一些新建筑后未被接管的更改。但如果提问者不想使用默认的共享首选项,则这没有帮助…这不是在保存我的数据。你编写的用于存储首选项的代码我们自己的文件和我为inbuild文件名提供的代码都运行良好。尝试清理您的项目并再次运行它。但是,如果提问者不想使用默认的共享prefs,那么这没有帮助……好吧……这不是在保存我的数据。您编写的用于将首选项存储到我们自己的文件的代码和我为inbuild文件名提供的代码都可以正常工作。尝试清理项目并再次运行它。