赞
踩
使用首选项保存应用数据,由于基础太差,被首选项折磨了两三天,终于发现了自己使用首选项失败的原因,“创建单例模式”的代码写错了。
使用首选项的思路:
1、获取首选项时需要输入全局上下文context参数,故使用单例模式维护一个全局上下文
2、全局上下文类中维护一个map,用来存储得到首选项实例,方便在多个地方使用这个首选项实例进行数据存储和加载
- //单例模式
- export class GlobalContext {
- private constructor() { }
- private static instance: GlobalContext;
- public _objects = new Map<string, Object>();
-
- public static getContext(): GlobalContext {
- if (!GlobalContext.instance) {
- GlobalContext.instance = new GlobalContext();
- }
- return GlobalContext.instance;
- }
-
- getObject(value: string): Object | undefined {
- return this._objects.get(value);
- }
-
- setObject(key: string, objectClass: Object): void {
- this._objects.set(key, objectClass);
- }
- }
3、创建一个PreferenceUtil的类,实现创建首选项、以及从首选项中保存数据、获取数据
- export class PreferencesUtil {
-
- createFontPreferences(context: Context) {
- let fontPreferences: Function = (() => {
- let preferences: Promise<dataPreferences.Preferences> = dataPreferences.getPreferences(context,
- PREFERENCES_NAME);
- return preferences;
- });)
- GlobalContext.getContext().setObject('getFontPreferences', fontPreferences);
- }
-
- async getChangeFontSize() {
- let fontSize: number = 0;
- let getFontPreferences: Function = GlobalContext.getContext().getObject('getFontPreferences') as Function;
- fontSize = await (await getFontPreferences()).get(KEY_APP_FONT_SIZE, fontSize);
- return fontSize;
- }
-
- }
以上是官方的代码,我首选项使用失败的原因如下:
单例模式创建错误,每次返回都是不同的对象,对象map中储存的preference实例找不到,使得数据存储失败。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。