java - 如何使用来自不同 Activity 的 SharedPreferences?

标签 java android sharedpreferences

<分区>

我搜索了如何在 Android 中使用 SharedPreferences,但遇到了问题。

我在 SP 中保存了一些 Strings 并以这种方式将数据保存在 Main Activity 中:

OnCrete 函数中我定义:

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

    SharedPreferences.Editor editor = sp.edit();

然后我按以下方式将字符串保存到 SharedPreferences:

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);
            }

在第二个 Activity 中,我尝试检索数据:

@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.getDefaultSharedPreferences(getApplicationContext());

相比,这是一个不同的共享首选项文件

所以用

SharedPreferences sharedPreferences = getSharedPreferences("MyPref", 0);

代替

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

getSharedPreferences("MyPref", 0); 如果不存在,将始终创建一个新文件,而 getDefaultSharedPreferences 为您提供一个 pref 文件,可供整个应用程序都提到了任何名字

关于java - 如何使用来自不同 Activity 的 SharedPreferences?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52338785/

相关文章:

java - 我如何在 Kryo 中检测到 "End of File"?

java - 将JFrame与变量连接

java - 由于无法找到 Android 启动器类,无法在 Android 设备上运行 LibGDX 游戏

Android Studio 错误 13=权限在 linux 中被拒绝

android - SQLite 中使用的数据类型

java - 为单个测试用例生成 JUnit 报告

java - getIntent() 上的空指针异常

android - 如何根据保存在android studio共享首选项中的单选按钮id启用单选组的特定单选按钮

android - 在 PreferenceActivity 中修改 Preference 值在 Activity 关闭之前没有效果

java - Sharedpreferences 中的值输入无效