Java 如何使用来自不同活动的SharedReference?

Java 如何使用来自不同活动的SharedReference?,java,android,sharedpreferences,Java,Android,Sharedpreferences,我搜索了如何在Android中使用SharedReferences,遇到了一个问题 我将一些字符串保存在SP中,并以以下方式将数据保存在Main Activity中: 在OnCrete函数中,我定义: sp = getApplicationContext().getSharedPreferences("MyPref", 0); // 0 - for private mode SharedPreferences.Editor editor = sp.edit(); 然后我用以下

我搜索了如何在Android中使用SharedReferences,遇到了一个问题

我将一些
字符串
保存在
SP
中,并以以下方式将数据保存在
Main Activity
中:

OnCrete
函数中,我定义:

    sp = getApplicationContext().getSharedPreferences("MyPref", 0); // 0 - for private mode

    SharedPreferences.Editor editor = sp.edit();
然后我用以下方式将字符串保存到SharedReferences:

mail = edmail.getText().toString();
            pass = edpass.getText().toString();
            color = edcolor.getText().toString();
            phone = edphone.getText().toString();

            SharedPreferences.Editor editor = sp.edit();
            if (mail.equals("") || pass.equals("") || color.equals("") || phone.equals("")||img.getDrawable() == null
                    )
                Toast.makeText(getApplicationContext(), "you have to fill all the fields", Toast.LENGTH_SHORT).show();
            else {
                editor.putString("mail", mail);
                editor.putString("phone", phone);
                editor.putString("color", color);
                editor.putString("password", pass);

                editor.apply();

                Toast.makeText(getApplicationContext(), "Signed up", Toast.LENGTH_SHORT).show();

                Intent intent = new Intent(this, Main2Activity.class);
                intent.putExtra("img",bitmap);
                startActivity(intent);
            }
在第二个活动中,我尝试检索数据:

@Override
public void onClick(View v) {
    Intent intent=getIntent();
    Bitmap bitmap = (Bitmap) intent.getParcelableExtra("img");
    imgv.setImageBitmap(bitmap);

    LoadPreferences();

    //txtmail.setText(value);
}
private void LoadPreferences(){
    SharedPreferences sharedPreferences = PreferenceManager.getDefaultSharedPreferences(getApplicationContext());
    String  data = sharedPreferences.getString("mail", null) ;
    Toast.makeText(this,data, Toast.LENGTH_LONG).show();
}

toast表示默认值,而不是实际值

您将数据保存在
MyPref
文件中,与
PreferenceManager.getDefaultSharedReferences(getApplicationContext())相比,该文件是一个不同的共享首选项文件

所以使用

SharedPreferences sharedPreferences = getSharedPreferences("MyPref", 0);
而不是

SharedPreferences sharedPreferences = PreferenceManager.getDefaultSharedPreferences(getApplicationContext());

getSharedReferences(“MyPref”,0)将始终创建一个新文件,而
GetDefaultSharedReferences
将为您提供一个pref文件,该文件可供整个应用程序使用,同时提及您在
MyPref
文件中保存的数据,该文件与其他共享首选项文件不同
PreferenceManager.getDefaultSharedReferences(getApplicationContext())

所以使用

SharedPreferences sharedPreferences = getSharedPreferences("MyPref", 0);
而不是

SharedPreferences sharedPreferences = PreferenceManager.getDefaultSharedPreferences(getApplicationContext());

getSharedReferences(“MyPref”,0)将始终创建一个新文件,而
GetDefaultSharedReferences
为您提供一个pref文件,可供整个应用程序使用,同时提及任何名称

更改加载声明:

SharedPreferences sharedPreferences = PreferenceManager.getDefaultSharedPreferences(getApplicationContext());
致:


更改加载声明:

SharedPreferences sharedPreferences = PreferenceManager.getDefaultSharedPreferences(getApplicationContext());
致:


快速附加:OP应该使用
Context.MODE\u PRIVATE
而不仅仅是
0
。虽然
0
是MODE PRIVATE的值,但是谢谢,所以两者都是一样的,尽管我同意
Context.MODE\u PRIVATE
更具可读性,更具意义这只是推荐的方式,所以我推荐它:pI很高兴我能帮忙,快乐编码!快速附加:OP应该使用
Context.MODE\u PRIVATE
而不仅仅是
0
。虽然
0
是MODE PRIVATE的值,但是谢谢,所以两者都是一样的,尽管我同意
Context.MODE\u PRIVATE
更具可读性,更具意义这只是推荐的方式,所以我推荐它:pI很高兴我能帮忙,快乐编码!这是帕夫尼特答案的副本。这是帕夫尼特答案的副本。