获取首选项API适用于Android和PC

use*_*652 5 java android

我想在PC或Android手机上运行的草图中保存用户首选项,使用与标准"Java-way"相同的代码.

我的目的的理想候选者似乎是java.util.prefs.Preferences类.所以,我写了一个小测试脚本,看看它是否正在处理:

String prId = "counter";
Preferences prefs = Preferences.userNodeForPackage(this.getClass());
int counter = prefs.getInt(prId, 0);

println(counter);
prefs.putInt(prId, 1+counter);
Run Code Online (Sandbox Code Playgroud)

该程序每次执行时都会输出越来越多的数字 - 在PC上.在Android上,始终显示默认值(0).是否需要执行其他步骤才能在Android上运行此操作?要求的权限?是否有任何替代方案可以在两个平台上保存名称 - 值对?

视频:"WRITE_EXTERNAL_STORAGE"权限已启用

Aar*_* He 0

在 Android 中,存储首选项的首选方法是使用SharedPreferences. 等效的代码如下:

String prId = "counter";
SharedPreferences prefs = getPreferences(MODE_PRIVATE);
int counter = prefs.getInt(prId,0);    // Get int, default is 0

SharedPreferences.Editor prefsEditor = prefs.edit();
prefsEditor.putInt(prId, counter++);    // Put counter back
prefsEditor.commit();    //Don't forget to commit the changes
Run Code Online (Sandbox Code Playgroud)

我不知道为什么java.util.prefs.Preferences在 Android 上会失败。我怀疑原因是当前Activity或应用程序被破坏后数据将被删除。

由于每个平台的目录结构不同,因此很难仅使用一种相同的方法来获得偏好。例如,数据存储在/.java/.userPrefs/**yourpacakgename**/prefs.xmlAndroid 上,而在 Windows 上存储在注册表中,~/Library/Preferences/**yourpacakgename**/prefs.xml在 Mac OS X 上则存储在注册表中。此外,您无法Preferences.userRoot()在 Android 中使用,因为应用程序无法访问root