【问题标题】:Android getDefaultSharedPreferencesAndroid getDefaultSharedPreferences
【发布时间】:2012-06-02 21:51:25
【问题描述】:

我的代码是:

final String eulaKey = "mykey";
final SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(getApplicationContext());
boolean hasBeenShown = prefs.getBoolean(eulaKey, false);

总是根据操作系统版本返回不同的值。在 2.2、2.3.4、3.2、4.0.3 中测试 - 返回正确值。但是对于带有 2.3.7 和 CianogenMod 7.1 的设备 Zte 刀片 - 结果总是错误的。我想 getBoolean 的默认值。

这里是写布尔值的代码:

final String eulaKey = "mykey";
final SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(getApplicationContext());
SharedPreferences.Editor editor = prefs.edit();
editor.putBoolean(eulaKey, true);
editor.commit();

有人知道吗?

更新: 将我当前的代码与我以前的代码版本进行比较 - 代码没有区别。 唯一的区别在于清单:代码在 minVersion=8 和 targetVersion=8 下工作正常 现在我正在使用 minversion=8 和 target=13 /because of Admob/ 进行编译。 也许有些 API 发生了变化,但我对此一无所获。

解决方案: - 从快捷方式和菜单启动应用程序给了我不同的 DefaultSharedPreferences。从我的代码中删除 DefaultSharedPreferences 后 - 它运行完美。我不能只说:人们不会做捷径,所以我不得不更改代码。

【问题讨论】:

  • 某些设备随机丢失 SharedPreferences 数据并非闻所未闻。有关示例,请参见 code.google.com/p/android/issues/detail?id=14359
  • 此信息是否仅与 getDefaultSharedPreferences 相关?你知道关于 getSharedPreferences("myAppPrefs", Context.MODE_PRIVATE); 的相同问题吗? ?
  • 尝试使用 getSharedPreferences 而非默认设置。它工作正常
  • 在 getPreferenceScreen().getSharedPreferences().registerOnSharedPreferenceChangeListener(this);说警告和弃用!我们现在做什么?
  • 嗯...似乎操作系统版本与软件包名称混淆了。请参阅我关于共享首选项的这些功能差异的问答:stackoverflow.com/a/37953072/4410376

标签: android sharedpreferences


【解决方案1】:

试试这个方法:

final String eulaKey = "mykey";
Context mContext = getApplicationContext();
mPrefs = mContext.getSharedPreferences("myAppPrefs", Context.MODE_PRIVATE);
SharedPreferences.Editor editor = mPrefs.edit();
editor.putBoolean(eulaKey, true);
editor.commit();

在这种情况下,您可以指定自己的首选项文件名 (myAppPrefs) 并控制对其的访问权限。其他操作模式包括:

  • MODE_WORLD_READABLE
  • MODE_WORLD_WRITEABLE
  • MODE_MULTI_PROCESS

【讨论】:

  • 从快捷方式和菜单启动应用程序给了我不同的 DefaultSharedPreferences。从我的代码中删除 DefaultSharedPreferences 后 - 它运行完美。我不能只说:人们不会做速写,所以我不得不更改代码。
【解决方案2】:

如果您已升级到以 API 30 为目标,请将其放入您的 gradle 依赖项中:

implementation 'androidx.preference:preference-ktx:1.0.0'//For Kotlin 项目

implementation 'androidx.preference:preference:1.1.1'//For Java Projects

重新同步 Gradle 后,更改所有导入来源

import android.preference.PreferenceManager

import androidx.preference.PreferenceManager

【讨论】:

    猜你喜欢
    • 2011-07-20
    • 1970-01-01
    • 2019-11-11
    • 2017-01-24
    • 1970-01-01
    • 1970-01-01
    • 2012-03-12
    • 2014-01-17
    • 2011-08-22
    相关资源
    最近更新 更多