求助:关于元服务中使用preferences的相关问题

2024-11-06 15:10:26
42次阅读
2个回答
悬赏10积分

对于数据持久化这个操作,元服务只支持“通过用户首选项实现数据持久化” 我的设想是这样的

在页面中我把数据保存下来并持久化 然后在元服务卡片中,点击其中一个按钮,直接获取我持久化的数据进行下一步的操作

出现的问题是: 通过预览器进行测试时,没有问题,效果符合我的设想 但是在模拟器中测试时,元服务卡片这里点击以后,无法获取持久化的数据

想请教这是什么问题?真机上是否会有这个问题? 谢谢

对于数据持久化,我这里写了一个用来调用的,最后两种测试情况都用的这段代码,实际代码如下:


const contextall = getContext(this);

export class mydata{
  dataPreferences: preferences.Preferences | null = null;
  context:Context | null = getContext(this);
  _Init : () =>Promise<string>=()=>{
    let that = this;
    return new Promise((succ,err)=>{
      if(that.dataPreferences != null)return;
      console.log("applog:数据库初始化")
      let options: preferences.Options = { name: 'myStore' };
      that.dataPreferences = preferences.getPreferencesSync(that.context, options);
      succ("success")
    })
  }
  set : (key:string,value:string)=>Promise<string>=(key,value)=>{
    return new Promise((succ, err) => {
      if(this.dataPreferences){
        this.dataPreferences.putSync(key,value);
        this.dataPreferences.flush((err2: BusinessError) => {
          if (err2) {
            console.error(`applog:Failed to flush. Code:${err2.code}, message:${err2.message}`);
            return;
          }
          console.log(`applog:数据保存成功:${key}:${value}`);
          succ(`数据保存成功:${key}:${value}`);
        })
      }else{
        console.log(`applog:数据保存失败:${key}:${value}`);
        err(`数据保存失败:${key}:${value}`);
      }
    });
  }
  get :(key:string) =>Promise<string>=(key)=>{
    return new Promise((succ,err)=>{
      if(this.dataPreferences){
        let val = ""+this.dataPreferences.getSync(key, 'null');
        console.log(`applog:数据获取成功:${key}:${val}`);
        succ(val);
      }else{
        console.log(`applog:数据获取失败`);
      }
    })
  }
  get2=(key:string)=>{
    if(this.dataPreferences){
      let val = ""+this.dataPreferences.getSync(key, 'null');
      console.log(`applog:数据获取成功2:${key}:${val}`);
      return val;
    }else{
      console.log(`applog:数据获取失败2`);
      return "null";
    }
  }
  delete:(key:string) =>Promise<string>=(key)=>{
    return new Promise((succ,err)=>{
      if(this.dataPreferences){
        this.dataPreferences.deleteSync(key);
        console.log("applog:数据删除成功");
        succ(`数据删除成功`);
      }
    })
  }

  constructor(t?:boolean,context?:Context) {
    if(!t){
      this._Init();
    }
    if(!context){
      this.context = contextall;
    }else{
      this.context = context;
    }
  }

}
收藏00

登录 后回答。没有帐号? 注册 一个。

    2024-11-07 10:40:01
    最佳答案

    hard to say

    2024-11-07 14:19:43
    最佳答案

    建议改为关系型数据库,官方也建议在添加卡片onAddForm回调函数里,把卡片Id,规格,存储在关系型数据库里。

    • 狼哥
      2024-11-07 14:23:03

      想了解更多关于卡片知识点,也可以点击下面链接,观看官方最近一次关于卡片的直播回看视频。

      创新场景:万能卡片开发实践

      https://developer.huawei.com/consumer/cn/training/course/live/C101730105347358932

    • 小张作者
      2024-11-07 16:17:22
      狼哥是这样的,我项目创建的时候选的是元服务不是app,关系型数据库提示说不支持