【问题标题】:how to use SharedPreference among activities如何在活动之间使用 SharedPreference
【发布时间】:2013-06-30 08:24:59
【问题描述】:

我正在使用 SharedPreference 编写代码来存储用户的用户名和密码,但每次我输入信息时,xml 文件中较旧的信息都会被较新的信息覆盖,我必须如何获取所有数据?

 SharedPreferences sp1=getSharedPreferences("myshared", 0);
 sp1.edit().putString("name", name.getText().toString()).commit();
 sp1.edit().putString("pass", pass.getText().toString()).commit();
 sp1.edit().putString("age",age.getText().toString()).commit();
 sp1.edit().putString("id",id.getText().toString()).commit();

【问题讨论】:

  • 当然被覆盖了——你正在覆盖它!你想达到什么目的?
  • 另外,为了提高性能,您应该只调用一次edit()commit()(创建一个SharedPreferences.Editor 变量)。

标签: android sharedpreferences preferences preferenceactivity


【解决方案1】:

听起来您正在覆盖活动之间的共享偏好。 SharedPreferences 像磁盘上的文件一样持久存在,因此您不应该遇到未设置值的问题,因此您必须覆盖它。

你可以得到你的SharedPreferences

SharedPreferences sp1=getSharedPreferences("myshared", 0);
String name = sp1.getString("name", "noname");
String pass = sp1.getString("pass", "nopass");
...

您可以通过检查它们是否等于默认值来确定是否设置了名称/密码(nonamenopass,在这种情况下很容易是 null)。

【讨论】:

  • 听起来你是在告诉我,我的 xml 文件会一直覆盖我的数据?
  • 不,您的 XML 文件没有覆盖您的数据,您实际上是在代码中的某处覆盖它。例如,您可能在活动中执行sp1.edit().putString("name", name.getText().toString()).commit(); in onResume,这最初会将它们覆盖为其默认值。解决此问题的一种简单方法是 检查 是否在您调用 sp1.edit().putString[...]之前 设置了名称/密码,如果它不是默认值,则不要不要覆盖它。
  • Simon:我正在尝试将我的所有数据都放在我的 xml 文件中,而不是像注册系统一样覆盖它们。
  • Dororo:非常感谢,我会处理这个。
猜你喜欢
  • 2012-01-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-12-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多