HarmonyOS路由与数据存储

组件:https://developer.huawei.com/consumer/cn/doc/harmonyos-references-V2/ts-components-summary-0000001478181369-V2
属性:https://developer.huawei.com/consumer/cn/doc/harmonyos-references-V3/ts-universal-attributes-border-0000001333720989-V3

@ohos.router (页面路由)

导入模块 import router from '@ohos.router'
跳转到应用内的指定页面。

router.pushUrl({
  url: 'pages/routerpage2',
  params: {
    data1: 'message',
    data2: {
      data3: [123, 456, 789]
    }
  }
})
  .then(() => {
    // success
  })
  .catch(err => {
    console.error(`pushUrl failed, code is ${err.code}, message is ${err.message}`);
  })

用应用内的某个页面替换当前页面,并销毁被替换的页面。不支持设置页面转场动效,如需设置,推荐使用Navigation组件。

router.replaceUrl({
  url: 'pages/detail',
  params: {
    data1: 'message'
  }
})
  .then(() => {
    // success
  })
  .catch(err => {
    console.error(`replaceUrl failed, code is ${err.code}, message is ${err.message}`);
  })

返回上一页面或指定的页面。

router.back({url:'pages/detail'});    
如果url未设置,则返回上一页,页面不会重新构建,页面栈里面的page不会回收,出栈后会被回收。

数据存储

1 概述

在移动互联网蓬勃发展的今天,移动应用给我们生活带来了极大的便利,这些便利的本质在于数据的互联互通。因此在应用的开发中数据存储占据了非常重要的位置,HarmonyOS应用开发也不例外。

2 什么是首选项

首选项为应用提供Key-Value键值型的数据存储能力,支持应用持久化轻量级数据,并对其进行增删改查等。该存储对象中的数据会被缓存在内存中,因此它可以获得更快的存取速度,下面详细介绍下首选项的开发过程。

3 首选项运作机制

首选项的特点是:

1、以Key-Value形式存储数据

Key是不重复的关键字,Value是数据值。

2、非关系型数据库

区别于关系型数据库,它不保证遵循ACID(Atomicity, Consistency, Isolation and Durability)特性,数据之间无关系。

进程中每个文件仅存在一个Preferences实例,应用获取到实例后,可以从中读取数据,或者将数据存入实例中。通过调用flush方法可以将实例中的数据回写到文件里。
在这里插入图片描述
在这里插入图片描述

//引入模块
import dataPreferences from '@ohos.data.preferences';

// 保存数据
await preferences.put(key, value);

//取数据
value = await preferences.get(key);

// 数据持久化,通过flush方法把应用数据保存到文件中,使得应用数据保存期限变长
preferences.flush();

//删除数据
value = preferences.delete(key);
 value.then(() => {
   Logger.info("删除成功");
 }).catch((err) => {
   Logger.error(err);
 });

详细:https://developer.huawei.com/consumer/cn/training/course/slightMooc/C101667367018821971

1、创建一个PreferencesUtil.est文件
导入import dataPreferences from '@ohos.data.preferences';模块
定义常量

//PreferencesUtil.est
`import dataPreferences from '@ohos.data.preferences';

const PREFERENCES_NAME='myPreferences'//数据库名字

2、需要在entryAbility.ets的onCreate方法获取首选项实例

//entryAbility.ets
import PreferencesUtil from '../common/database/PreferencesUtil';

PreferencesUtil.createPreferences(this.context);

注意entryAbility文件后缀

// PreferencesUtil.ets  
    createPreferences(context: Context) {
    	globalThis.getPreferences = (() => {
      // 获取首选项实例

     	let preferences: Promise<dataPreferences.Preferences>  = dataPreferences.getPreferences(context, PREFERENCES_NAME);
     	return preferences;
    });

  }

保存数据

//zdyDetail.ets
 const USER_DATA= 'myData';//表中存储的关键字
 PreferencesUtil.save(USER_DATA, this.text);


// PreferencesUtil.ets  

 save(key,value) {
    globalThis.getPreferences().then(async (preferences) => {
      // 保存数据

      Logger.info(key+'这是一个数据保存');
      await preferences.put(key, value);
      preferences.flush();
    }).catch((err) => {
      Logger.error(TAG, 'put the preferences failed, err: ' + err);
    });
  }

获取数据

//zdyDetail.ets

 const USER_DATA= 'myData';//表中存储的关键字
 PreferencesUtil.get(USER_DATA).then((value) => {
   this.getText = value;
   Logger.info(value+'这是一个value');
 });


// PreferencesUtil.ets  
 get(key,value) {
	   async get(key) {
		    let data;
		    const preferences = await globalThis.getPreferences();
		    data = await preferences.get(key,data);
		    Logger.info('这是一个get方法'+data);
		    return data;
	  }
  }

效果:
保存前
在这里插入图片描述
保存并查询
在这里插入图片描述

全部代码

//EntryAbility.ets
onCreate(want: Want, launchParam: AbilityConstant.LaunchParam) {
  GlobalContext.getContext().setObject('abilityWant', want);

   PreferencesUtil.createPreferences(this.context);
 }
//PreferencesUtil.ets



import dataPreferences from '@ohos.data.preferences';
import Logger from '../utils/Logger';

const TAG = '[PreferencesUtil]';
const PREFERENCES_NAME = 'myPreferences';



export class PreferencesUtil {
  createPreferences(context: Context) {
    globalThis.getPreferences = (() => {
      // 获取首选项实例

      let preferences: Promise<dataPreferences.Preferences>  = dataPreferences.getPreferences(context, PREFERENCES_NAME);
      return preferences;
    });

  }

  save(key,value) {
    globalThis.getPreferences().then(async (preferences) => {
      // 保存数据

      Logger.info(key+'这是一个保存数据');
      await preferences.put(key, value);
      preferences.flush();
    }).catch((err) => {
      Logger.error(TAG, 'put the preferences failed, err: ' + err);
    });
  }
  async get(key) {
    let data;
    const preferences = await globalThis.getPreferences();
    data = await preferences.get(key,data);
    Logger.info('这是一个get方法2'+data);
    return data;
  }
}

export default new PreferencesUtil();
//zdyDetail.ets
import image from '@ohos.multimedia.image';
import PreferencesUtil from '../common/database/PreferencesUtil';
import Logger from '../common/utils/Logger';
 const USER_DATA= 'myData';//表中存储的关键字


@Component
export struct zdyDetail {
  @State text : string=''
  @State getText :string=''



  build(){
     Column(){
       TextInput({ placeholder: '请输入一个值用于保存' })
         .onChange((value: string) => {
           this.text = value
         })
       Button('这是一个保存数据按钮,点击我即可保存用户数据').onClick((event: ClickEvent) => {
         Logger.info('这是一个保存'+ this.text);
         PreferencesUtil.save(USER_DATA, this.text);

       }).margin({top : '100'})
       Button('这是一个获取数据按钮,点击即可查看保存数据').onClick((event: ClickEvent) => {

         PreferencesUtil.get(USER_DATA).then((value) => {
           this.getText = value;
           Logger.info(value+'这是一个value');
         });

       }).margin({top : '100'})
      Text(this.getText)
     }
  }
  aboutToAppear(){
    
    this.text="22"
  }
}

在这里插入图片描述

  • 3
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值