首页 > 其他分享 >通过用户首选项进行数据持久化

通过用户首选项进行数据持久化

时间:2024-06-01 16:59:48浏览次数:16  
标签:持久 preferenceInstance 写入 用户 user KEY 首选项 数据

是什么:

用户首选项为应用提供Key-Value键值型的数据处理能力,支持应用持久化轻量级数据,并对其修改和查询。

作用:

当用户希望有一个全局唯一存储的地方,可以采用用户首选项来进行存储。

运作机制:

用户程序通过ArkTS接口调用用户首选项读写对应的数据文件。开发者可以将用户首选项持久化文件的内容加载到Preferences实例,每个文件唯一对应到一个Preferences实例,系统会通过静态容器将该实例存储在内存中,直到主动从内存中移除该实例或者删除该文件。

应用首选项的持久化文件保存在应用沙箱内部,可以通过context获取其路径。

限制:

  • Key键为string类型,要求非空且长度不超过80个字节。

  • 如果Value值为string类型,请使用UTF-8编码格式,可以为空,不为空时长度不超过8192个字节。

  • 内存会随着存储数据量的增大而增大,所以存储的数据量应该是轻量级的,建议存储的数据不超过一万条,否则会在内存方面产生较大的开销。

 使用:

初始化首选项实例:

const KEY = 'UserInfo'
//获得首选项实例
//{ name: 'user' } 应用首选项的持久化文件的名字叫user
const preferenceInstance = preferences.getPreferencesSync(getContext(), { name: 'user' })

写入数据并持久化:

// 写入数据并持久化
  setPreferenceData(userinfo:user) {
    //Key 要写入数据的key
    //value 要写入的数据
    preferenceInstance.putSync(KEY, JSON.stringify(userinfo))

    //将数据写入到文件中
    preferenceInstance.flush()
  }

注意:当对应的键已经存在时,putSync()方法会覆盖其值。可以使用hasSync()方法检查是否存在对应键值对。

获取首选项数据:

 //获取首选项数据
  getPreferenceData() {
    // 第一个参数KEY:要获取数据的key
    // 第二个参数defValue:如果没有读取到数据,则返回默认数据
    return preferenceInstance.getSync(KEY,'')
  }

删除指定Key的数据:

 delPreferenceData(){
    //删除指定KEY的数据
    preferenceInstance.deleteSync(KEY)
  }

获取首选项文件的目录:

getPreferenceDir(){
    //获取首选项文件的目录
    return getContext().preferencesDir
  }

首选项文件操作演示代码:

import { preferences } from '@kit.ArkData';
import { promptAction } from '@kit.ArkUI';

const KEY = 'UserInfo'
//获得首选项实例
const preferenceInstance = preferences.getPreferencesSync(getContext(), { name: 'user' })

class user {
  name: string
  age: number

  constructor(name: string, age: number) {
    this.name = name;
    this.age = age;
  }
}

@Entry
@Component
struct PreferencesPage {
  // 写入数据并持久化
  setPreferenceData(userinfo:user) {
    //Key 要写入数据的key
    //value 要写入的数据
    preferenceInstance.putSync(KEY, JSON.stringify(userinfo))

    //将数据写入到文件中
    preferenceInstance.flush()
  }

  //获取首选项数据
  getPreferenceData() {
    // 第一个参数KEY:要获取数据的key
    // 第二个参数defValue:如果没有读取到数据,则返回默认数据
    return preferenceInstance.getSync(KEY,'')
  }

  delPreferenceData(){
    //删除指定KEY的数据
    preferenceInstance.deleteSync(KEY)
  }

  getPreferenceDir(){
    //获取首选项文件的目录
    return getContext().preferencesDir
  }

  build() {
    Row() {
      Column() {
        Button('向首选项保存数据')
          .onClick(()=>{
            this.setPreferenceData(new user('张三',16))
            promptAction.showToast({message:'保存成功'})
          })

        Button('更新首选项数据')
          .onClick(()=>{
            this.setPreferenceData(new user('李四',18))
            promptAction.showToast({message:'更新成功'})
          })

        Button('获取首选项数据')
          .onClick(()=>{
            const store=this.getPreferenceData()
            promptAction.showToast({message:store.toString()})
          })
        Button('删除首选项数据')
          .onClick(()=>{
            this.delPreferenceData()
            promptAction.showToast({message:'删除成功'})
          })

        Button('获取首选项文件路径')
          .onClick(()=>{
            const dir=this.getPreferenceDir()
            promptAction.showToast({message:dir})
          })
      }
      .width('100%')
    }
    .height('100%')
  }
}

查看文件:

标签:持久,preferenceInstance,写入,用户,user,KEY,首选项,数据
From: https://blog.csdn.net/God_Finger/article/details/139375020

相关文章

  • Session+Redis,Token+Redis,JWT+Redis,用户身份认证,到底选择哪种更合适?
    1三中方案的比较在选择Session+Redis、Token+Redis、JWT+Redis这三种用户身份认证方案时,我们需要考虑各自的优势、劣势以及应用场景。以下是对这三种方案的详细分析和比较:1.Session+Redis优势:Session登录是一种在Web应用程序中用于跟踪用户状态的机制,通过在服务器端存储......
  • 优秀的运营是怎么通过“AI“提升用户活跃度的?
    运营创新指为一套以数据为核心的商业实战策略。它侧重于整合营销、销售、服务的数据驱动过程,并以市场反馈引导产品研发。本专题为你提供最价值的B2B销售、供应链管理、服务管理、组织管理等数字化运营创新的最新策略、方法和实践案例,帮助企业通过深入的数据分析、实验、验证,寻......
  • 采用java18+vue语言+springboot开发的家政上门服务平台源码,(平台管理端+用户端+服务端
    采用java18+vue语言+springboot开发的家政上门服务平台源码,(平台管理端+用户端+服务端全套源码)家政管理平台系统是运用现代计算机和网络技术,集信息网、服务网为一体,对社区家政需求信息汇集整理、综合处理,发挥信息介绍、组织服务、资源共享的作用,向社区居民提供优质服务的网络......
  • 第一个用户进程 --- 根文件系统 sbin/init 进程 及其配置文件 /etc/inittab
    sbin/init是根文件系统提供的用户进程,它是第一个被执行的用户进程。执行过程会读取配置文件/etc/inittab,运行inittab文件中的各个子进程。 inittab配置文件格式Formatforeachentry:<id>:<runlevels>:<action>:<process>id:  表示这个子进程要使用的控制台,如果省略,......
  • Java学习-Sentinel 1.8.4 规则持久化到Nacos
    文章目录一、前言二、快速体验1、部署sentinel2、SpringCloud中规则持久化到nacos3、sentinel控制台操作测试三、sentinel-dashboard源码修改1、`pom.xml`中添加依赖2、`application.properties`中添加nacos配置3、nacos配置新增NacosConfig新增NacosConfigUtil4、举......
  • 安装fail2ban服务-防止用户暴力破解root密码
    安装fail2ban服务,防止用户暴力破解root密码(最多让试着登录5次,5次密码输错就封杀ip)[root@bogon~]#lsepel-release-6-8.noarch.rpm[root@bogon~]#rpm-ivhepel-release-6-8.noarch.rpm #或yum-yinstallepel-release[root@bogon~]#yuminstallfail2ban-y复制ja......
  • Kubernetes 硬盘持久化之 StorageClass
    Kubernetes硬盘持久化之StorageClassStorageClass定义StorageClass为管理员提供了描述存储"类"的方法。不同的类型可能会映射到不同的服务质量等级或备份策略,或是由集群管理员制定的任意策略。这个类的概念在其他存储系统中有时被称为"配置文件"。每个StorageClass......
  • JSON 文件操作:Python 中最好的 JSON 数据持久化工具
    ......
  • 基于k-means算法的用户进行聚类项目(免费提供全部源码)
    下载地址如下:基于k-means算法的用户进行聚类项目(免费提供全部源码)资源-CSDN文库项目介绍背景在大数据时代,用户数据的收集和分析变得尤为重要。企业通过分析用户行为数据,可以更好地理解客户需求,提升服务质量,从而在市场竞争中占据有利位置。然而,随着数据量的增大和数据种类的......
  • Llama模型家族训练奖励模型Reward Model技术及代码实战(二)从用户反馈构建比较数据集
    LlaMA3系列博客基于LlaMA3+LangGraph在windows本地部署大模型(一)基于LlaMA3+LangGraph在windows本地部署大模型(二)基于LlaMA3+LangGraph在windows本地部署大模型(三)基于LlaMA3+LangGraph在windows本地部署大模型(四)基于LlaMA3+LangGraph在w......