Android 显示NullPointerException的共享首选项,即使代码正确

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

我正在使用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)

这是我的活动代码:

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文件名提供的代码都可以正常工作。尝试清理项目并再次运行它。