HaaS UI小程序解决方案基础教学之四: JSAPI数据存储

简介: Storage JSAPI是HaaS UI提供的一个轻量级数据存储接口,特别适用于存储应用的各项数据。

名词解释

AliOS Things: 阿里云智能IoT团队自研的物联网操作系统

HaaS:全称是Hardware as a Service,阿里云智能IoT团队基于AliOS Things系统推出的硬件即服务

HaaS UI:全称是Hardware as a Service User Interface,是源自AliOS Things操作系统上的一套应用&图形解决方案,支持C/C++和 JS两种开发语言

1、Storage JSAPI简介

Storage JSAPI是HaaS UI提供的一个轻量级数据存储接口,特别适用于存储应用的各项数据。

例如在天气应用中,在某一次使用时用户添加了若干个城市,当用户下一次点开时也希望之前设置的城市会保存在应用中,以方便直接获取信息。又如在屏保设置选项里,用户设置了打开屏保,当设备下次开机时也需要记住用户的选项,将屏保打开。这时就需要借助于Storage JSAPI,利用它来存储一些键值对(Key-Value)参数。

Storage JSAPI的作用域为当前小程序应用,包含的接口如下:

接口宿主 JSAPI 调用方法 接口功能
storage setStorage $falcon.jsapi.storage.setStorage({key: 'key', data: 'data'}) 数据存储
getStorage $falcon.jsapi.storage.getStorage({key: 'key'})
removeStorage $falcon.jsapi.storage.removeStorage({key: 'key'})
clearStorage $falcon.jsapi.storage.clearStorage()

1.1、 setStorage

保存key-value数据

入参

Object 类型,属性如下:

属性 类型 必填 描述
key String 缓存数据的 key。
data String 缓存数据的 value。
callback Function 回调函数,包含result参数。

示例代码

// sync
const storage = $falcon.jsapi.storage;
storage.setStorage({
  key: 'key',                           // key
  data: 'storage content',  // value
}, result => {result && !result.error && console.log('dialog clicked ', result});

// async
const storage = $falcon.jsapi.storage;
let result = await storage.setStorage({
  key: 'key',                           // key
  data: 'storage content',  // value
});
              
result && !result.error && console.log('dialog clicked ', result);

success 回调函数

属性 类型 描述
key String 缓存数据的 key。
data String 缓存数据的 value。

1.2、 getStorage

读取key-value数据

入参

Object 类型,属性如下:

属性 类型 必填 描述
key String 缓存数据的 key。
callback Function 回调函数,包含result参数。

示例代码

storage.getStorage({
  key: 'key'        // key
}, result => {
    result && !result.error && console.log('dialog clicked ', result);
});

success 回调函数

属性 类型 描述
data String key 对应的内容。

1.3、 removeStorage

删除当前小程序指定key所对应的value数据

入参

Object 类型,属性如下:

属性 类型 必填 描述
key String 缓存数据的 key。
callback Function 回调函数,包含result参数。

示例代码

storage.removeStorage({
  key: 'key'        // key
}, result => {result && !result.error && console.log('dialog clicked ', result);});

success 回调函数

属性 类型 描述
key String 缓存数据的 key。

1.4、 clearStorage

清空当前小程序所有的key-value数据

入参

Object 类型,属性如下:

属性 类型 必填 描述
appId String 小程序的 appId。
callback Function 回调函数,包含result参数。

示例代码

storage.clearStorage({
}, result => {result && !result.error && console.log('dialog clicked ', result);});

success 回调函数

属性 类型 描述
appId String 被清空数据的小程序的 id。

1.5、 getStorageInfo

获取当前小程序所有的key数据,将返回所有通过setStorage接口存储的key数据

入参

Object 类型,属性如下:

属性 类型 必填 描述
appId String 小程序的 appId。
callback Function 回调函数,包含result参数。

示例代码

storage.getStorageInfo({
}, result => {result && !result.error && console.log('dialog clicked ', result);});

success 回调函数

属性 类型 描述
keys String Array 当前 storage 中所有的 key。
currentSize Number 当前占用的空间大小, 单位为 KB。
limitSize Number 限制的空间大小,单位为 KB。

2、Storage JSAPI使用教程

2.1、 storage对象获取

在使用Storage JSAPI前,需要先获取$falcon.jsapi的storage对象,所有的接口都是通过storage对象进行调用的。

const storage = $falcon.jsapi.storage;

2.2 、数据存储

数据存储操作需要通过步骤1获取的storage对象来进行,具体可通过storage.setStorage来实现键值对参数的存储,可存储的数据类型有Bool、Float、Int、Long、String五种。

数据类型/数据操作 写入操作
Bool 支持
Float 支持
Int 支持
Long 支持
String 支持

在进行数据存储时,有两种方式,一种是同步存储,另一种是异步存储。同步存储直接返回存储结果,异步存储需要在async函数中操作,通过await返回存储结果。

接口名/参数列表 入参1 入参2
setStorage key: 'key' data: 'storage content'

同步存储方式:

const storage = $falcon.jsapi.storage;
storage.setStorage({
  key: 'key',               // key
  data: 'storage content',  // value
}, result => {});

异步存储方式:

const storage = $falcon.jsapi.storage;
let result = await storage.setStorage({
  key: 'key',               // key
  data: 'storage content',  // value
});
console.log(result);

2.3、 数据读取

数据读取操作也需要通过步骤1获取的storage对象来进行,具体可通过storage.getStorage来实现键值对参数的读取,可读取的数据类型有Bool、Float、Int、Long、String五种。

数据类型/数据操作 读取操作
Bool 支持
Float 支持
Int 支持
Long 支持
String 支持

在进行数据读取时,也有两种方式,一种是同步读取,另一种是异步读取。同步读取直接返回读取结果,异步读取需要在async函数中操作,通过await返回读取结果。

接口名/参数列表 入参1
getStorage key: 'key'

同步读取方式:

const storage = $falcon.jsapi.storage;
storage.getStorage({
  key: 'key'    // key
}, result => {
  result && !result.error && console.log('dialog clicked ', result);
});

异步读取方式:

const storage = $falcon.jsapi.storage;
let result = await storage.getStorage({
  key: 'key',    // key
});
console.log(result);

3、Storage JSAPI调用示例

本节将以屏保设置选项为示例,介绍如何去调用Storage JSAPI。屏保设置选项是指用户是否设置了开启屏保,用户在设置了屏保选项后,设备在下次开机后,应保持用户的设置,根据用户的设置默认将屏保打开或关闭。用户设置了屏保开关的选项后,这个设置参数就可以通过Storage JSAPI存储到磁盘中,下次设备开机就会主动去读取该选项,这样就做到了用户设置的持久化。

image.png

image.png

屏保设置选项

3.1、 屏保设置页面开发

首先需要开发屏保设置页面,模板和

  <div class="wrapper">
    <text class="screen" @click="open">屏保开启</text>
    <FlSwitch
            @change="switchChange"
            :width="100"
            :height="50"
            colorChecked="blue"
            v-model="switchChecked"
    />
  </div>
</template>

<style scoped>
.wrapper {
  justify-content: center;
  align-items: center;
  background-color: #f8f8ff;
}
.screen {
  margin-bottom: 20px;
  padding: 10px;
  background-color: #888;
  border-radius: 10px;
  align-items: center;
  justify-content: center;
  font-size: 30px;
}
</style>

3.2、 保存屏保设置参数

用户设置的屏保是否开启的参数可通过Storage JSAPI中的setstorage接口进行保存,当用户选择打开屏保时,将screen-saver参数设置为on,当用户选择关闭屏保时,将screen-saver参数设置为off。setstorage设置screen-saver参数的操作在FlSwitch组件的状态发生改变时进行,FlSwitch组件的状态通过switchChange函数进行监听,具体

import FlSwitch from "../../packages/switch/index.vue";
export default {
  name: "index",
  components: {
    FlSwitch,
  },
  data() {
    return {
      msg: "",
    };
  },
  methods: {
    switchChange(on) {
      console.log("switchChange ", on);
      const storage = $falcon.jsapi.storage;
      if(on == true) {
        storage.setStorage({
          key: 'screen-saver',         // key
          data: 'on',                  // value
        }, result => {});
      } else {
        storage.setStorage({
          key: 'screen-saver',         // key
          data: 'off',                 // value
        }, result => {});
      } 
    },
    finishApp() {
      this.$app.finish();
    },
    finishPage() {
      this.$page.finish();
    },
  },
};
</script>

3.3、 屏保设置效果展示

当用户设置开启屏保时,screen-saver的值被置为on;当用户设置关闭屏保时,screen-saver的值被置为off。

70f071b3bfc6bd7a7a518a668947d49f.gif

4. 开发者技术支持

如需更多技术支持,可加入钉钉开发者群,或者关注微信公众号

image.png

相关文章
|
1月前
|
小程序 JavaScript 前端开发
uni-app开发微信小程序:四大解决方案,轻松应对主包与vendor.js过大打包难题
uni-app开发微信小程序:四大解决方案,轻松应对主包与vendor.js过大打包难题
591 1
|
12天前
|
小程序 机器人 开发者
QQ 小程序已发布,但无法被搜索的解决方案
我的 QQ 小程序在 2024 年 8 月就已经审核通过,上架后却一直无法被搜索到。打开后,再在 QQ 上下拉查看 “最近使用”,发现他出现一下又马上消失。
29 2
|
26天前
|
开发框架 人工智能 小程序
小程序常见的 UI 框架
【10月更文挑战第17天】小程序 UI 框架为开发者提供了便捷的工具和资源,帮助他们快速构建高质量的小程序界面。在选择框架时,需要综合考虑各种因素,以找到最适合项目的解决方案。随着技术的不断进步,UI 框架也将不断发展和创新,为小程序开发带来更多的便利和可能性。
45 2
|
1月前
|
小程序 开发者 UED
支付宝小程序UI/UX设计原则与最佳实践
支付宝小程序UI/UX设计原则与最佳实践
48 6
|
1月前
|
缓存 小程序 索引
uni-app开发微信小程序时vant组件van-tabs的使用陷阱及解决方案
uni-app开发微信小程序时vant组件van-tabs的使用陷阱及解决方案
196 1
|
1月前
|
机器学习/深度学习 人工智能 JSON
微信小程序原生AI运动(动作)检测识别解决方案
近年来,疫情限制了人们的出行,却推动了“AI运动”概念的兴起。AI运动已在运动锻炼、体育教学、线上主题活动等多个场景中广泛应用,受到互联网用户的欢迎。通过AI技术,用户可以在家中进行有效锻炼,学校也能远程监督学生的体育活动,同时,云上健身活动形式多样,适合单位组织。该方案成本低、易于集成和扩展,已成功应用于微信小程序。
|
1月前
|
小程序 Java
小程序访问java后台失败解决方案
小程序访问java后台失败解决方案
44 2
|
1月前
|
机器学习/深度学习 人工智能 小程序
做AI运动小程序有哪些解决方案,如何进行选型?
随着深度学习技术的发展,AI运动应用如“天天跳绳”和“百分运动”变得流行。本文探讨了将AI运动功能引入微信小程序的可行性,并介绍了几种解决方案。实现AI运动计数的关键技术包括视频抽帧、人体检测、姿态识别等。文中详细描述了离线方案(全离线和半离线)和原生方案(自研AI引擎和成熟插件)的不同实现方式,并对各种方案进行了对比,建议优先选择成本低、体验佳的AI运动识别插件方案。
|
1月前
|
JavaScript 索引
Vue开发中Element UI/Plus使用指南:常见问题(如Missing required prop: “value“)及中文全局组件配置解决方案
Vue开发中Element UI/Plus使用指南:常见问题(如Missing required prop: “value“)及中文全局组件配置解决方案
112 0
|
1月前
|
JSON 小程序 前端开发
微信小程序-人脸核身解决方案
微信小程序-人脸核身解决方案
175 0
下一篇
无影云桌面