import dataPreferences from '@ohos.data.preferences';
import bundleManager from '@ohos.bundle.bundleManager';
本地首選項數(shù)據(jù)的保存,利用key value
【使用要求】
DevEco Studio 3.1.1 Release
api 9
【使用示例】
1、app啟動時,從本地讀取數(shù)據(jù),并寫到內(nèi)存中去
注意:修改EntryAbility.ts的擴展名,改成ets,即:EntryAbility.ets
import MyPreferencesUtil from '../common/utils/MyPreferencesUtil'
export default class EntryAbility extends UIAbility {
onCreate(want, launchParam) {
MyPreferencesUtil.getData(this.context)
}
}
2、在修改內(nèi)存數(shù)據(jù)時,再調(diào)用一下保存方法
注意:開發(fā)工具DevEco studio中,默認每次啟動app是先卸載再安裝導(dǎo)致本地保存的數(shù)據(jù)丟失,需要改下配置每次運行都覆蓋安裝【entry-->edit config... --> keep application data】
import {MyPreferencesUtil,UserInfo} from '../common/utils/MyPreferencesUtil'
Button('測試').onClick(()= >{
console.info('====當(dāng)前內(nèi)存信息 1 ',JSON.stringify(MyPreferencesUtil.getInstance()))
MyPreferencesUtil.getInstance().mUserInfo.token = "測試測試"
MyPreferencesUtil.saveData()
console.info('====當(dāng)前內(nèi)存信息 2 ',JSON.stringify(MyPreferencesUtil.getInstance()))
})
export class MyPreferencesUtil {
//日志過濾器
private static readonly LOG: string = "====MyPreferencesUtil"
//本地保存的文件名,和文件內(nèi)的key名這里打算共用一個就行
private static readonly FILENAME_AND_KEY: string = 'FILENAME_AND_KEY'
/** 本地要保存的用戶信息 */
public mUserInfo: UserInfo = new UserInfo()
// 本地要保存的環(huán)境信息
public mEnvirInfo: EnvirInfo = new EnvirInfo()
//=========單例模式,保存數(shù)據(jù)到內(nèi)存實例 start=========
private static instance: MyPreferencesUtil;
private constructor() {
}
/**
* 通過單例,獲取本地映射到內(nèi)存中的實例
* @returns 內(nèi)存中本地數(shù)據(jù)的實例
*/
public static getInstance() {
if (this.instance == null) {
this.instance = new MyPreferencesUtil();
}
return this.instance;
}
單例模式,保存數(shù)據(jù)到內(nèi)存實例
從磁盤本地讀取數(shù)據(jù)到內(nèi)存,賦值給instance
public static async getData(context: Context) {
try {
console.info(MyPreferencesUtil.LOG, 'getData');
let file = await dataPreferences.getPreferences(context, MyPreferencesUtil.FILENAME_AND_KEY)
console.info(MyPreferencesUtil.LOG, 'getData', 'file succ');
let value = await file.get(MyPreferencesUtil.FILENAME_AND_KEY, JSON.stringify(MyPreferencesUtil.getInstance()))
console.info(MyPreferencesUtil.LOG, 'getData', 'get succ', 'value:' + value);
Object.assign(MyPreferencesUtil.getInstance(), JSON.parse(value.toString()))//將本地數(shù)據(jù) 拷貝到單例中去。
console.info(MyPreferencesUtil.LOG, 'getData', 'assign succ');
let bundleFlags = bundleManager.BundleFlag.GET_BUNDLE_INFO_DEFAULT;
let data = await bundleManager.getBundleInfoForSelf(bundleFlags); //開始保存app的版本名稱和版本號
MyPreferencesUtil.getInstance().mEnvirInfo.versionName = data.versionName
MyPreferencesUtil.getInstance().mEnvirInfo.versionCode = data.versionCode
console.info(MyPreferencesUtil.LOG, 'getData', 'set versionName and versionCode succ');
} catch (e) {
console.error(MyPreferencesUtil.LOG, 'getData', JSON.stringify(e));
}
}
鴻蒙OS開發(fā) | 更多內(nèi)容↓點擊 | HarmonyOS與OpenHarmony技術(shù) |
---|---|---|
鴻蒙技術(shù)文檔 | 開發(fā)知識更新庫gitee.com/li-shizhen-skin/harmony-os/blob/master/README.md 在這。 | 或+mau123789學(xué)習(xí),是v喔 |
數(shù)據(jù)備份至磁盤本地
public static async saveData() {
try {
console.info(MyPreferencesUtil.LOG, 'saveData');
let file = await dataPreferences.getPreferences(getContext(this), MyPreferencesUtil.FILENAME_AND_KEY)
console.info(MyPreferencesUtil.LOG, 'saveData', 'file succ');
await file.put(MyPreferencesUtil.FILENAME_AND_KEY, JSON.stringify(MyPreferencesUtil.getInstance()))
console.info(MyPreferencesUtil.LOG, 'saveData', 'put succ');
await file.flush()
console.info(MyPreferencesUtil.LOG, 'saveData', 'flush succ');
} catch (e) {
console.error(MyPreferencesUtil.LOG, 'saveData', JSON.stringify(e));
}
}
}
用戶信息
export class UserInfo {
用戶登錄成功后要保存的token
public token: string = ""
}
環(huán)境信息
export class EnvirInfo {
首次啟動的彈窗是否點擊過“同意”。true:已同意,false:沒同意
public isAgreement: boolean = false
當(dāng)前app的版本名稱
public versionName: string = ''
當(dāng)前app的版本號
public versionCode: number = 0
}
審核編輯 黃宇
-
封裝
+關(guān)注
關(guān)注
126文章
7901瀏覽量
142959 -
存儲
+關(guān)注
關(guān)注
13文章
4314瀏覽量
85846 -
鴻蒙OS
+關(guān)注
關(guān)注
0文章
188瀏覽量
4391
發(fā)布評論請先 登錄
相關(guān)推薦
評論