在另一个 activity 中检索 sharedpreferences 字符串

Retrieving sharedpreferences string in another activity

我正在尝试使用 sharedpreferences 在一个 activity 中保存一些 edittext 字段,然后将这些保存的值输出到另一个 activity 中的 textview 字段。数据似乎在第一个 activity 中保存正常,但我无法解析新 activity 中存储的变量。有谁知道我做错了什么?谢谢!

public class RelativeLayout extends AppCompatActivity {

EditText edit1;
EditText edit2;
EditText edit3;
public String Name = "nameKey";
public String Email = "emailKey";
public String Phone = "phoneKey";
public static final String MyPREFERENCES = "PrefStore" ;
SharedPreferences settings;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_relative_layout);
    final Button ButtonReturn = (Button) findViewById(R.id.button3);
    settings = getSharedPreferences(MyPREFERENCES, 0);
    //Onclick listen for return button press. On press App returns to main      activity.
    ButtonReturn.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            edit1=(EditText)findViewById(R.id.editText);
            edit2=(EditText)findViewById(R.id.editText2);
            edit3=(EditText)findViewById(R.id.editText3);
            String n  = edit1.getText().toString();
            String e  = edit2.getText().toString();
            String p  = edit3.getText().toString();
            SharedPreferences.Editor editor = settings.edit();
            editor.putString(Name, n);
            editor.putString(Email, e);
            editor.putString(Phone, p);
            editor.apply();

第二个activity在下面。我正在尝试检索 sharedpreferences 中的 Name 变量,但它显示为红色并出现错误。无法解析符号 'Name'。

public class MainActivity extends AppCompatActivity {

SharedPreferences settings;
public static final String MyPREFERENCES = "PrefStore" ;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    final Button ButtonDCUWeb = (Button) findViewById(R.id.ButtonDCUWeb);
    final Button ButtonStartCamera = (Button) findViewById(R.id.ButtonStartCamera);
    final Button ButtonLinearLayout = (Button) findViewById(R.id.ButtonLinearLayout);
    final Button ButtonRelativeLayout = (Button) findViewById(R.id.ButtonRelativeLayout);
    settings = getSharedPreferences(MyPREFERENCES, MODE_PRIVATE);
    String value = settings.getString(Name, "Default_Value");

您的变量 Name 仅在您的第一个 activity 的范围内定义。您需要在第二个 activity... 你可以做两件事:

1 - 在第二个 activity 中声明一个变量 Name,其值与第一个相同。 2 - 将 Name 变量设为静态,以便您可以在第二个 activity 中访问它: public static String Name = "nameKey"; 在您的第二个 activity 中,您可以通过以下方式访问它:

String value = settings.getString(RelativeLayout.Name, "Default_Value"); 

您也需要在第二个 activity 中的 onCreate() 之前声明 Name 才能引用它。添加:

public String Name = "nameKey";

在您的 RelativeLayout activity 中,将其放入您的 onClick 回调中:

public class RelativeLayout extends AppCompatActivity {
    ...
    ...
    public static String Name = "nameKey";
    public static String Email = "emailKey";
    public static String Phone = "phoneKey";

    ...
    ...

    SharedPreferences sharedPreferences = getPreferences(Context.MODE_PRIVATE);
    SharedPreferences.Editor editor = sharedPreferences.edit();
    editor.putString(Name, n);
    editor.putString(Email, e);
    editor.putString(Phone, p);
    editor.apply();
}

MainActivity.java:

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    ...
    ...

    SharedPreferences sharedPreferences = getPreferences(Context.MODE_PRIVATE);
    String nameValue = sharedPreferences.getString(RelativeLayout.Name, "Default_Name_Value");
    String emailValue = sharedPreferences.getString(RelativeLayout.Email, "Default_Email_Value");
    String phoneValue = sharedPreferences.getString(RelativeLayout.Phone, "Default_Phone_Value");
    // Do something with the values you retrieve
}

在此过程中,您不需要在活动中保留对 sharedPreferences 的引用。