鸿蒙移动应用开发基础 课件 项目6 用户首选项存储-完成底部导航栏页面的布局_第1页
鸿蒙移动应用开发基础 课件 项目6 用户首选项存储-完成底部导航栏页面的布局_第2页
鸿蒙移动应用开发基础 课件 项目6 用户首选项存储-完成底部导航栏页面的布局_第3页
鸿蒙移动应用开发基础 课件 项目6 用户首选项存储-完成底部导航栏页面的布局_第4页
鸿蒙移动应用开发基础 课件 项目6 用户首选项存储-完成底部导航栏页面的布局_第5页
已阅读5页,还剩22页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

项目6用户首选项存储-完成底部导航栏页面的布局鸿蒙移动应用开发基础授课:学习网站/#/cn/home/consumer/cn/doc//mainPlay/course/246260023.html目

录01概念和适用场景02数据的储存03数据的读取知识目标:核心技术掌握熟练运用鸿蒙数据持久化方案与Preferences轻量存储;掌握Flex弹性布局构建自适应UI,利用ForEach实现动态列表渲染,并熟悉ArkTS页面路由与自定义组件开发,夯实技术基础。能力目标:实战项目落地具备独立开发多页面、底部导航及数据存储的完整鸿蒙应用模块能力;能够运用Flex布局解决复杂排版难题,并将数据持久化逻辑与UI展示高效结合,实现功能与体验的统一。素质目标:职业素养养成树立以用户体验为中心的设计思维,注重代码的模块化与可复用性;严格遵循鸿蒙应用设计规范,培养规范、严谨、高效的开发习惯,为长期职业发展奠定良好素养。通过“知识+能力+素质”三位一体的培养体系,构建从理论认知到实践落地、再到职业素养升华的完整学习闭环,打造符合鸿蒙生态要求的应用型人才。课程目标与学习路径01概念和适用场景什么是数据持久化?核心定义将内存中易失的临时数据,通过特定技术保存到磁盘、闪存等持久性存储介质中,使其在应用重启、设备关机或断电后依然存在,是实现数据长期留存的关键技术。鸿蒙应用沙箱机制:安全隔离鸿蒙系统为每个应用分配独立、隔离的专属存储目录,严格限制跨应用访问权限。这种机制从底层架构上保障了用户数据的隐私安全,同时避免了应用间的数据冲突,让持久化存储更加规范可控。保存用户状态留存登录信息、主题偏好与个性化设置,还原用户熟悉的使用环境。缓存业务数据存储最近浏览、离线文章等内容,减少网络请求,提升应用响应速度。记录用户行为沉淀搜索历史、操作日志,为数据分析、产品优化提供真实可靠的依据。鸿蒙应用存储方案对比Preferences:轻量级键值存储核心特点:API极简易用,读写速度快,数据全量加载至内存,适合高频访问。适用/不适用:适用于用户配置、状态标记、轻量计数器;不适用于大量数据存储、复杂查询及多进程并发写入场景。RelationalStore:关系型数据库核心特点:基于SQLite实现,支持ACID事务、索引优化与复杂的SQL查询能力。适用/不适用:适用于结构化业务数据(如订单、用户信息)及需多条件筛选的数据;不适用于简单键值对存储与频繁跨设备同步场景。KVStore:分布式键值存储核心特点:基于RocksDB引擎,提供跨设备、跨应用的自动数据同步能力,一致性强。适用/不适用:适用于跨终端共享数据(如购物车、待办)、轻量同步状态;不适用于无需同步的本地数据及海量结构化数据存储。文件存储(FileI/O):原生文件系统核心特点:直接操作文件系统,拥有最高的灵活性和自由度,支持自定义格式管理。适用/不适用:适用于大文件(图片、视频)、缓存数据及导入/导出数据;不适用于结构化数据、需要频繁随机读写和复杂查询的场景。1.1什么是Preferences?`Preferences`是ArkUI框架提供的一种键值对(Key-Value)存储机制,专为应用轻量级数据的持久化存储设计,适用于保存用户配置、状态信息等少量、高频读取的数据。01.全量加载应用首次访问Preferences时,系统会将整个.prefs文件一次性读取并加载到内存中,为后续操作做好准备。02.内存操作所有put、get等读写操作均直接在内存中进行,无需频繁I/O,因此数据访问和修改的速度极快,效率极高。03.异步落盘内存中的数据不会自动保存,只有主动调用flush()方法,系统才会将数据异步写入磁盘文件,从而完成持久化存储。核心警示:put操作≠数据保存!若未显式调用flush()方法,应用意外退出时内存数据将丢失,务必养成操作后及时flush的习惯。1.1Preferences使用限制使用Preferences存储数据前,必须严格遵守以下核心限制,规避存储失败、数据丢失或应用运行异常的风险。Key键命名限制类型须为非空字符串,长度不超过1024字节(约1KB)。建议命名简洁且语义化,例如使用`isDarkMode`代替冗长的描述性命名,提升可读性与解析效率。Value数据类型与大小限制仅支持数字、字符串、布尔型及其数组;非空字符串长度上限为16MB。该存储方式适合轻量简单数据,大文本(如文章、日志)应改用文件存储方案。存储条目数量限制建议存储条目不超过1万条。数据量过大会显著增加内存占用,引发应用启动变慢、运行卡顿甚至崩溃。大量结构化数据应使用数据库存储。多进程并发写入限制该存储方案不支持多进程并发写入操作,否则极易造成数据覆盖或丢失。若应用架构涉及多进程数据共享,请选用支持进程安全的存储方案。02数据存储2.1Preferences核心API详解-获取实例核心方法:getPreferences传入应用上下文与指定的存储文件名,即可获取对应的Preferences实例。若目标配置文件不存在,系统会自动创建一个新的空文件,简化了文件初始化流程。关键特性:单例模式(Singleton)对于同一个文件名,无论调用多少次getPreferences方法,系统始终返回同一个实例对象。这保证了数据的一致性,避免了多实例操作导致的数据冲突与资源浪费。TypeScript异步调用示例import{preferences}from'@ohos.data.preferences';importcommonfrom'@mon';//获取UIAbility上下文对象constcontext=getContext(this)ascommon.UIAbilityContext;//异步获取名为'user_settings'的实例constprefs=awaitpreferences.getPreferences(context,'user_settings');注意:getPreferences是异步方法,需配合await使用;建议在Ability生命周期的onCreate阶段完成实例获取。2.2Preferences核心API详解-存储数据01.存入数据(`put`)将键值对数据写入内存中的Preferences实例,操作效率极高,但不会立即写入磁盘,仅驻留在内存空间中。prefs.put('username','张三');

prefs.put('isLogin',true);02.持久化数据(`flush`)将内存中暂存的所有修改批量写入磁盘文件,是确保数据永久保存、不丢失的关键一步。方法支持回调处理执行结果。prefs.flush((err)=>{

err?console.error(err):console.log('Saved!');

});核心提示:频繁调用flush会增加磁盘I/O开销,建议在批量修改完成后统一调用,或在应用退出/后台时执行持久化操作。03数据读取3.1数据读取核心步骤获取实例与数据存储流程第一步相同,通过`getPreferences(context,name)`方法获取Preferences实例。读取数据通过`get(key,defaultValue)`方法读取数据。`key`是要读取的数据的键,`defaultValue`是当键不存在时返回的默认值(类型需与存储的数据一致)。设置默认值可以有效避免空指针错误。代码示例asyncgetUserInfo():Promise<void>{try{constprefs=awaitdataPreferences.getPreferences(...);this.username=prefs.get('username','点击登录');}catch(err){...}}关键提示关键提示:读取数据前需确保已通过`getPreferences`获取实例,且实例初始化完成。若存储时使用的是`Uint8Array`类型,读取时也需指定`defaultValue`为`newUint8Array()`,避免类型不匹配。3.2删除数据01.删除指定键值对(delete)用于精准删除存储中指定的单个键值对数据。需特别注意,执行删除操作后,必须调用flush()方法,才能将该删除动作持久化到本地文件中。prefs.delete('username');//删除键为'username'的数据

prefs.flush();//持久化删除操作02.删除整个存储文件(deletePreferences)此方法会直接删除对应名称的整个Preferences存储文件,该文件下的所有数据将被永久清除,无法恢复。通常仅在应用卸载、数据重置等极端场景下使用,务必谨慎调用。//删除名为'user_settings'的整个存储文件

preferences.deletePreferences(context,'user_settings');核心差异:delete操作针对单个数据条目,可控且安全;deletePreferences操作针对整个文件,是高危操作,需在用户确认后执行。Preferences实战案例-存储与读取用户在界面输入文本,点击“存储”将数据写入磁盘,点击“读取”可立即展示持久化内容,直观演示了数据持久化的核心流程。核心场景:模拟用户输入交互通过绑定输入框状态变量,配合“存储”与“读取”按钮的事件回调,实现数据在内存与磁盘间的双向流转,完成完整的用户交互闭环。saveToPreferences方法获取Preferences实例后,用put方法将输入值写入内存,关键的一步是调用flush()确保数据异步持久化到磁盘,防止数据丢失。loadFromPreferences方法同样获取实例,使用get方法读取键值数据,并设置“暂无存储内容”作为默认值,将结果赋值给展示变量以实时更新用户界面。异步操作IO操作非阻塞,不影响主线程响应。上下文管理需正确获取上下文实例进行初始化。flush必要性put仅存内存,flush才写入磁盘。任务实践041底部导航栏“消息”页面的实现步骤1:另存项目打开项目,将项目另存为`JiuYe_TabsMenu_Message`。步骤2:新建文件夹在`main_pages`目录下新建`message`文件夹。步骤3:创建页面文件在`message`文件夹下新建`index.ets`文件。项目结构示例

底部导航栏“消息”页面的实现整体布局使用Flex布局,纵向排列Header、内容区和TabsMenu。引入组件导入自定义的Header和TabsMenu组件。设置状态栏在生命周期中调用工具类方法设置状态栏颜色。import{Header}from'../../components/Header'import{TabsMenu}from'../../components/CustomTabs'importUiApifrom'../../utils/UiApi'@Entry@ComponentstructIndex{build(){...}}

底部导航栏“消息”页面的实现Flex布局实现功能入口系统消息平台通知与重要公告收到建立新的好友或合作请求对我感兴趣他人的关注与互动核心代码片段Flex({direction:FlexDirection.Column,justifyContent:FlexAlign.Center,alignItems:ItemAlign.Center}){Image().backgroundColor(Color.Orange).width(40).height(40).padding(8).borderRadius('50%')Text('系统消息').fontSize(14).margin({top:8})}.width('25%')2.底部导航栏“消息”页面的实现简洁布局清晰的视觉层级,信息一目了然。功能入口核心功能快速触达,提升操作效率。底部导航当前页面高亮显示,明确用户位置。3.创建“我的”页面步骤1:新建文件夹在`main_pages`目录下新建`mine`文件夹。步骤2:创建页面文件在`mine`文件夹下新建`index.ets`文件。项目结构截图(高亮显示mine文件夹)

创建“我的”页面代码实现Column(){//背景图Image($rawfile('mine_bg.png'))//用户头像和信息Flex({ali

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论