当前位置:   article > 正文

arkTs中的Preference(首选项)_arkts 首选项失效

arkts 首选项失效

        使用首选项保存应用数据,由于基础太差,被首选项折磨了两三天,终于发现了自己使用首选项失败的原因,“创建单例模式”的代码写错了。

        使用首选项的思路:

1、获取首选项时需要输入全局上下文context参数,故使用单例模式维护一个全局上下文

2、全局上下文类中维护一个map,用来存储得到首选项实例,方便在多个地方使用这个首选项实例进行数据存储和加载

  1. //单例模式
  2. export class GlobalContext {
  3. private constructor() { }
  4. private static instance: GlobalContext;
  5. public _objects = new Map<string, Object>();
  6. public static getContext(): GlobalContext {
  7. if (!GlobalContext.instance) {
  8. GlobalContext.instance = new GlobalContext();
  9. }
  10. return GlobalContext.instance;
  11. }
  12. getObject(value: string): Object | undefined {
  13. return this._objects.get(value);
  14. }
  15. setObject(key: string, objectClass: Object): void {
  16. this._objects.set(key, objectClass);
  17. }
  18. }

3、创建一个PreferenceUtil的类,实现创建首选项、以及从首选项中保存数据、获取数据

  1. export class PreferencesUtil {
  2. createFontPreferences(context: Context) {
  3. let fontPreferences: Function = (() => {
  4. let preferences: Promise<dataPreferences.Preferences> = dataPreferences.getPreferences(context,
  5. PREFERENCES_NAME);
  6. return preferences;
  7. });)
  8. GlobalContext.getContext().setObject('getFontPreferences', fontPreferences);
  9. }
  10. async getChangeFontSize() {
  11. let fontSize: number = 0;
  12. let getFontPreferences: Function = GlobalContext.getContext().getObject('getFontPreferences') as Function;
  13. fontSize = await (await getFontPreferences()).get(KEY_APP_FONT_SIZE, fontSize);
  14. return fontSize;
  15. }
  16. }

以上是官方的代码,我首选项使用失败的原因如下:

单例模式创建错误,每次返回都是不同的对象,对象map中储存的preference实例找不到,使得数据存储失败。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/IT小白/article/detail/309314
推荐阅读
相关标签
  

闽ICP备14008679号