java – 未保存Android自定义首选项值

java – 未保存Android自定义首选项值,第1张

概述我正在尝试使用现有的Preference子类来保存颜色值.我没有编写类,但它应该在 android-7及更高版本上工作(我正在编译为android-9目标.)完整的源代码是 available here.这是保存首选项的地方: @Overridepublic void onColorChanged(int color) { if (isPersistent()) { bo 我正在尝试使用现有的Preference子类来保存颜色值.我没有编写类,但它应该在 android-7及更高版本上工作(我正在编译为androID-9目标.)完整的源代码是 available here.这是保存首选项的地方:
@OverrIDepublic voID oncolorChanged(int color) {    if (isPersistent()) {        boolean ret = persistInt(color);    }    // (update prevIEw Box,other stuff)}

使用调试输出我可以告诉isPersistent()返回true,但persistInt()返回false.根据Android documentation,persistInt()返回首选项是否持久;这些如何回归不同的价值? (注意:从构造函数中显式调用setPersistent(true).)

在任何情况下,都不会保存该值.对getPersistedInt(defaultValue)的调用将返回默认值,即使稍后在类的同一实例中也是如此.在下面的代码中,始终调用getPersistedInt()并始终返回mDefaultValue.

public int getValue() {    try {        if (isPersistent()) {            mValue = getPersistedInt(mDefaultValue);        }    } catch (ClassCastException e) {        mValue = mDefaultValue;    }    return mValue;}

为什么会这样,我怎样才能确保首选项保持不变?

解决方法 经过大量无望的搜索,我终于找到了问题:由于我的首选项XML文件中存在一个简单的拼写错误,因此首选值未分配密钥. (我使用androID.key而不是androID:key.)

由于AndroID在尝试保留没有键的首选项(但是默默地失败)时不会发出警告,因此在尝试保留值之前应调用shouldPersist()函数而不是isPersistent(),如果shouldPersist()返回false.例如:

@OverrIDepublic voID oncolorChanged(int color) {    mValue = color;    if (shouldPersist()) {        persistInt(color);    } else {        if (isPersistent())            Log.w("myapp","shouldPersist() returned false. Check if this preference has a key.");    }    // (update prevIEw Box,other stuff)}
总结

以上是内存溢出为你收集整理的java – 未保存Android自定义首选项值全部内容,希望文章能够帮你解决java – 未保存Android自定义首选项值所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/web/1145422.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-05-31
下一篇2022-05-31

发表评论

登录后才能评论

评论列表(0条)

    保存