The current repo belongs to Closed status, and some functions are restricted. For details, please refer to the description of repo status
14 Star 28 Fork 36

OpenHarmony-TPC/MMKV
Closed

Create your Gitee Account
Explore and code with more than 13.5 million developers,Free private repositories !:)
Sign up
文件
Clone or Download
index.ets 18.13 KB
Copy Edit Raw Blame History
liuhaikang authored 2024-09-19 16:46 +08:00 . 添加英文文档,demo国际化
/*
* Copyright (C) 2021-2024 Huawei Device Co., Ltd.
* All rights reserved.
*
* Licensed under the BSD 3-Clause License (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* https://opensource.org/licenses/BSD-3-Clause
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
import { MyClass } from '../bean/MyClass';
import prefrence from '@ohos.data.preferences';
import { LogUtil, MMKV, ICallBack } from '@ohos/MMKV';
import prompt from '@system.prompt';
import { ShowToastOptions } from '@system.prompt';
import fs from '@ohos.file.fs';
import { GlobalContext } from '../bean/GlobalContext';
let filePath = ''
let cachePath = ''
let fileName = 'prefFile'
let testLargeStr = "largeStringlargeStringlargeStringlargeStringlargeStringlargeStringlargeStringlargeStringlargeStringlargeStringlargeStringlargeStringlargeStringlargeStringlargeStringlargeStringlargeStringlargeStringlargeStringlargeStringlargeStringlargeStringlargeStringlargeStringlargeStringlargeStringlargeStringlargeStringlargeStringlargeStringlargeStringlargeStringlargeStringlargeStringlargeStringlargeStringlargeStringlargeStringlargeStringlargeStringlargeStringlargeStringlargeStringlargeStringlargeStringlargeStringlargeStringlargeStringlargeStringlargeStringlargeStringlargeStringlargeStringlargeStringlargeStringlargeStringlargeStringlargeStringlargeStringlargeStringlargeStringlargeStringlargeStringlargeStringlargeStringlargeStringlargeStringlargeStringlargeStringlargeStringlargeStringlargeStringlargeStringlargeStringlargeStringlargeStringlargeStringlargeStringlargeStringlargeStringlargeStringlargeStringlargeStringlargeStringlargeStringlargeStringlargeStringlargeStringlargeStringlargeStringlargeStringlargeStringlargeStringlargeStringlargeStringlargeStringlargeStringlargeStringlargeStringlargeStringlargeStringlargeStringlargeStringlargeStringlargeStringlargeStringlargeStringlargeStringlargeStringlargeStringlargeStringlargeStringlargeStringlargeStringlargeStringlargeStringlargeStringlargeStringlargeStringlargeStringlargeStringlargeStringlargeStringlargeStringlargeStringlargeStringlargeStringlargeStringlargeStringlargeStringlargeStringlargeStringlargeStringlargeStringlargeStringlargeStringlargeStringlargeStringlargeStringlargeStringlargeStringlargeStringlargeStringlargeStringlargeStringlargeStringlargeStringlargeStringlargeStringlargeStringlargeStringlargeStringlargeStringlargeStringlargeStringlargeStringlargeStringlargeStringlargeStringlargeStringlargeStringlargeStringlargeStringlargeStringlargeStringlargeStringlargeStringlargeStringlargeStringlargeStringlargeStringlargeStringlargeStringlargeStringlargeStringlargeStringlargeStringlargeStringlargeStringlargeStringlargeStringlargeStringlargeStringlargeStringlargeStringlargeStringlargeStringlargeStringlargeStringlargeStringlargeStringlargeStringlargeStringlargeStringlargeStringlargeStringlargeStringlargeStringlargeStringlargeStringlargeStringlargeStringlargeStringlargeStringlargeStringlargeStringlargeStringlargeStringlargeStringlargeStringlargeStringlargeStringlargeStringlargeStringlargeStringlargeStringlargeStringlargeStringlargeStringlargeStringlargeStringlargeStringlargeStringlargeStringlargeStringlargeStringlargeStringlargeStringlargeStringlargeStringlargeStringlargeStringlargeStringlargeStringlargeStringlargeStringlargeStringlargeStringlargeStringlargeStringlargeStringlargeStringlargeStringlargeStringlargeStringlargeStringlargeStringlargeStringlargeStringlargeStringlargeStringlargeStringlargeStringlargeStringlargeStringlargeStringlargeStringlargeStringlargeStringlargeStringlargeStringlargeStringlargeStringlargeStringlargeStringlargeStringlargeStringlargeStringlargeStringlargeStringlargeStringlargeStringlargeStringlargeStringlargeStringlargeStringlargeStringlargeStringlargeStringlargeStringlargeStringlargeStringlargeStringlargeStringlargeStringlargeStringlargeStringlargeStringlargeStringlargeStringlargeStringlargeStringlargeStringlargeStringlargeStringlargeStringlargeStringlargeStringlargeStringlargeStringlargeStringlargeStringlargeStringlargeStringlargeStringlargeStringlargeStringlargeStringlargeStringlargeStringlargeStringlargeStringlargeStringlargeStringlargeStringlargeStringlargeStringlargeStringlargeStringlargeStringlargeStringlargeStringlargeStringlargeStringlargeStringlargeStringlargeStringlargeStringlargeStringlargeStringlargeStringlargeStringlargeStringlargeStringlargeStringlargeStringlargeStringlargeStringlargeStringlargeStringlargeStringlargeStringlargeStringlargeStringlargeStringlargeStringlargeStringlargeStringlargeStringlargeStringlargeStringlargeStringlargeStringlargeStringlargeStringlargeStringlargeStringlargeStringlargeStringlargeStringlargeStringlargeStringlargeStringlargeStringlargeStringlargeStringlargeStringlargeStringlargeStringlargeStringlargeStringlargeStringlargeStringlargeStringlargeString"
@Entry
@Component
struct Index {
build() {
Flex({ direction: FlexDirection.Column, alignItems: ItemAlign.Center, justifyContent: FlexAlign.Center }) {
Button($r('app.string.init'))
.onClick(() => {
this.init()
}).margin({ top: 15 })
Button($r('app.string.save'))
.onClick(() => {
this.testCrud()
}).margin({ top: 15 })
Button($r('app.string.reset_key'))
.onClick(() => {
this.resetCrypt()
}).margin({ top: 15 })
Button($r('app.string.pref'))
.onClick(() => {
this.testPreference()
}).margin({ top: 15 })
Button($r('app.string.class'))
.onClick(() => {
this.serialize()
}).margin({ top: 15 })
Button($r('app.string.information'))
.onClick(() => {
this.get()
}).margin({ top: 15 })
Button($r('app.string.backups'))
.onClick(() => {
this.testBackup()
}).margin({ top: 15 })
Button($r('app.string.restore'))
.onClick(() => {
this.resortDir()
}).margin({ top: 15 })
Button($r('app.string.clear'))
.onClick(() => {
this.clear()
}).margin({ top: 15 })
}
.width('100%')
.height('100%')
}
aboutToAppear() {
filePath = GlobalContext.getContext().getObject("filesDir") as string
cachePath = GlobalContext.getContext().getObject("cacheDir") as string
LogUtil.i('aboutToAppear = ' + filePath)
}
/**
* 必须初始化
*/
init() {
LogUtil.i('init start ' + filePath)
let root = MMKV.initialize(filePath + '/mmkv', cachePath)
LogUtil.i('init root = ' + root)
this.showMsg('root = ' + root)
let context = GlobalContext.getContext().getObject("context") as Context
prefrence.getPreferences(context, fileName, (error, preferences) => {
preferences.put('key1', 'value1').then()
preferences.put('key3', 3).then()
preferences.put('key4', 4.012345648979466).then()
preferences.put('key2', false).then()
preferences.put('key1', 'hello mmkv').then()
preferences.getAll()
.then((obj) => {
LogUtil.e('testPreference allKeys = ' + JSON.stringify(obj))
})
})
let kv = MMKV.getMMKVWithMMapID('imported', MMKV.SINGLE_PROCESS_MODE, "", undefined);
kv.clearAll()
let callBack: MyICallBack = new MyICallBack();
kv.preferencesToMMKV(context, fileName, callBack);
}
/**
* test backup
*/
testBackup() {
LogUtil.i('testBackup start ')
let backupRootDir = filePath + '/mmkv_backup_3'
let mMapID = 'testCrud'
let otherDir = filePath + '/mmkv_3'
let ret = MMKV.backupOneToDirectory(mMapID, backupRootDir, otherDir);
LogUtil.i('testBackup ret ' + ret)
if (ret) {
let mmkv = MMKV.getBackedUpMMKVWithID(mMapID, MMKV.SINGLE_PROCESS_MODE, 'Tencent MMKV', backupRootDir);
LogUtil.i('testBackup check on backup file[' + mmkv.getMMapID() + '] allKeys: ' + mmkv.getAllKeys());
}
backupRootDir = filePath + '/mmkv_backup'
let temp = MMKV.backupAllToDirectory(backupRootDir)
this.showMsg('temp = ' + temp)
if (temp > 0) {
let mmkv = MMKV.getBackedUpMMKVWithID('imported', MMKV.SINGLE_PROCESS_MODE, "", backupRootDir);
LogUtil.i('backup file[' + mmkv.getMMapID() + '] allKeys: ' + mmkv.getAllKeys());
mmkv = MMKV.getBackedUpMMKVWithID('testKotlin', MMKV.SINGLE_PROCESS_MODE, "", backupRootDir);
LogUtil.i('backup file[' + mmkv.getMMapID() + '] allKeys: ' + mmkv.getAllKeys());
mmkv = MMKV.getBackedUpMMKVWithID('test/AES_reKey1', MMKV.SINGLE_PROCESS_MODE, "", backupRootDir);
LogUtil.i('backup file[' + mmkv.getMMapID() + '] allKeys: ' + mmkv.getAllKeys());
}
}
/**
* test restore
*/
resortDir() {
LogUtil.i('resortDir 0 ')
let dstDir = filePath + '/mmkv_backup_3'
let mMapID = 'testCrud'
let otherDir = filePath + '/mmkv_3'
let ret = MMKV.restoreOneMMKVFromDirectory(mMapID, dstDir, otherDir);
LogUtil.i('resortDir one [' + mMapID + '] ret = ' + ret)
if (ret) {
let mmkv = MMKV.getMMKVWithMMapID(mMapID, MMKV.SINGLE_PROCESS_MODE, 'Tencent MMKV', otherDir);
LogUtil.i('resortDir decodeString(stringData) = ' + mmkv.decodeString('stringData'))
LogUtil.i('resortDir decodeString(boolData) = ' + mmkv.decodeBool('boolData'))
LogUtil.i('resortDir decodeString(numberData) = ' + mmkv.decodeNumber('numberData'))
}
dstDir = filePath + '/mmkv_backup'
let count = MMKV.restoreAllFromDirectory(dstDir)
this.showMsg('count = ' + count)
if (count > 0) {
let mmkv = MMKV.getMMKVWithMMapID('imported', MMKV.SINGLE_PROCESS_MODE, "", undefined);
LogUtil.i('resortDir file[' + mmkv.getMMapID() + '] key1 value = ' + mmkv.decodeString('key1'))
LogUtil.i('resortDir file[' + mmkv.getMMapID() + '] key2 value = ' + mmkv.decodeBool('key2'))
LogUtil.i('resortDir file[' + mmkv.getMMapID() + '] key3 value = ' + mmkv.decodeNumber('key3'))
LogUtil.i('resortDir file[' + mmkv.getMMapID() + '] key4 value = ' + mmkv.decodeNumber('key4'))
mmkv = MMKV.getMMKVWithMMapID('testKotlin', MMKV.SINGLE_PROCESS_MODE, "", undefined);
LogUtil.w('resortDir file[' + mmkv.getMMapID() + '] allKeys: ' + mmkv.getAllKeys())
mmkv = MMKV.getMMKVWithMMapID('test/AES_reKey1', MMKV.SINGLE_PROCESS_MODE, "", undefined);
LogUtil.i('resortDir file[' + mmkv.getMMapID() + '] string value = ' + mmkv.decodeString('string'))
LogUtil.i('resortDir file[' + mmkv.getMMapID() + '] bool value = ' + mmkv.decodeBool('bool'))
LogUtil.i('resortDir file[' + mmkv.getMMapID() + '] number value = ' + mmkv.decodeNumber('number'))
LogUtil.i('resortDir file[' + mmkv.getMMapID() + '] set1 value = ' + mmkv.decodeSet('set1'))
}
}
/**
* test recrypt
*/
resetCrypt() {
LogUtil.i('resetCrypt 1 ')
let mMapID = 'test/AES_reKey1'
let mmkv = this.testInstance(mMapID, "", true, undefined)
mmkv.reCryptKey('Key_seq_1')
mmkv.clearMemoryCache()
this.testInstance(mMapID, 'Key_seq_1', false, undefined)
mmkv.reCryptKey("")
mmkv.clearMemoryCache()
this.testInstance(mMapID, "", false, undefined)
}
/**
* test storage
*/
testPreference() {
LogUtil.i('testPreference start')
let kv = MMKV.getMMKVWithMMapID('imported', MMKV.SINGLE_PROCESS_MODE, "", undefined);
// kv.clearAll()
// kv.preferencesToMMKV(fileName)
LogUtil.i('testPreference allKeys = ' + kv.getAllKeys())
LogUtil.i('testPreference string = ' + kv.decodeString('key1'))
this.showMsg(kv.decodeString('key1'))
LogUtil.i('testPreference bool = ' + kv.decodeBool('key2'))
this.showMsg('' + kv.decodeBool('key2'))
LogUtil.i('testPreference number = ' + kv.decodeNumber('key3'))
this.showMsg('' + kv.decodeNumber('key3'))
LogUtil.i('testPreference number = ' + kv.decodeNumber('key4'))
this.showMsg('' + kv.decodeNumber('key4'))
}
/**
* test serialize
*/
serialize() {
LogUtil.i('serialize start ')
this.showMsg('serialize start ')
let kv = MMKV.getMMKVWithMMapID('testKotlin', MMKV.SINGLE_PROCESS_MODE, "", undefined)
let myClass1 = new MyClass(1, 't1', 'desc1')
kv.encodeSerialize('serialize111', myClass1)
LogUtil.i('encodeSerialize myClass1.code = ' + myClass1.code + ' myClass1.description = ' + myClass1.description + ' myClass1.title = ' + myClass1.title)
let myClass2 = kv.decodeSerialize('serialize111', new MyClass())
LogUtil.i('encodeSerialize myClass2.code = ' + myClass2.code + ' myClass2.description = ' + myClass2.description + ' myClass2.title = ' + myClass2.title)
let myClass3 = kv.decodeSerialize('serialize11', new MyClass(3, 't3', 'desc3'))
LogUtil.i('encodeSerialize myClass3.code = ' + myClass3.code + ' myClass3.description = ' + myClass3.description + ' myClass3.title = ' + myClass3.title)
this.showMsg('serialize myClass2.code = ' + myClass2.code + ' myClass2.description = ' + myClass2.description + ' myClass2.title = ' + myClass2.title)
}
/**
* test mmkv info
*/
get() {
LogUtil.i('version = ' + MMKV.version() + ' pageSize = ' + MMKV.pageSize() + ' rootDir = ' + MMKV.getRootDir())
this.showMsg('version = ' + MMKV.version() + ' pageSize = ' + MMKV.pageSize())
}
/**
* test crud
*/
testCrud() {
LogUtil.i('testCrud start')
let cryptKey = 'Tencent MMKV'
let otherDir = filePath + '/mmkv_3'
LogUtil.i('testCrud - MMKV.pageSize() :' + MMKV.pageSize())
let ashemMMKV = MMKV.getMMKVWithMMapID('testCrud', MMKV.SINGLE_PROCESS_MODE, cryptKey, otherDir)
ashemMMKV.encodeBool('boolData', false)
ashemMMKV.encodeBool('boolDataTwo', true)
LogUtil.i('testCrud - decodeBool :' + ashemMMKV.decodeBool('boolData'))
ashemMMKV.encodeNumber('numberData', 2.2222)
LogUtil.i('testCrud - decodeNumber :' + ashemMMKV.decodeNumber('numberData'))
ashemMMKV.encodeNumber('numberData', 555.55)
LogUtil.i('testCrud - decodeNumber change :' + ashemMMKV.decodeNumber('numberData'))
ashemMMKV.encodeString('stringDataTwo', 'dhkfiafa')
ashemMMKV.encodeString('stringData', 'sdhd非微扰~!@#¥%……&*()——+')
ashemMMKV.encodeString('testLargeStr', testLargeStr)
LogUtil.i('testCrud - decodeString :' + ashemMMKV.decodeString('stringData'))
let fp = filePath + "/encodeStringLarge.txt";
let fd = fs.openSync(fp, fs.OpenMode.READ_WRITE | fs.OpenMode.CREATE).fd
fs.truncateSync(fd)
fs.writeSync(fd, ashemMMKV.decodeString('testLargeStr'))
fs.fsyncSync(fd)
fs.closeSync(fd)
fp = filePath + "/testNoKeyDefault.txt";
fd = fs.openSync(fp, fs.OpenMode.READ_WRITE | fs.OpenMode.CREATE).fd
fs.truncateSync(fd)
fs.writeSync(fd, ashemMMKV.decodeString('nokey', testLargeStr))
fs.fsyncSync(fd)
fs.closeSync(fd)
let set1 = new Set<string>()
set1.add(testLargeStr)
set1.add('ass2')
set1.add('ass3')
set1.add('ass0')
ashemMMKV.encodeSet('setData', set1)
LogUtil.i('testCrud - decodeSet : ' + ashemMMKV.decodeSet('setData'))
fp = filePath + "/testEncodeSetLargeStr.txt";
fd = fs.openSync(fp, fs.OpenMode.READ_WRITE | fs.OpenMode.CREATE).fd
fs.truncateSync(fd)
fs.writeSync(fd, ashemMMKV.decodeSet('setData').values().next().value)
fs.fsyncSync(fd)
fs.closeSync(fd)
fp = filePath + "/testNokeySetLargeStr.txt";
fd = fs.openSync(fp, fs.OpenMode.READ_WRITE | fs.OpenMode.CREATE).fd
fs.truncateSync(fd)
fs.writeSync(fd, ashemMMKV.decodeSet('nokeySet', set1).values().next().value)
fs.fsyncSync(fd)
fs.closeSync(fd)
LogUtil.i('testCrud containsKey(setData) = ' + ashemMMKV.containsKey('setData'))
LogUtil.i('testCrud - allKeys :' + ashemMMKV.getAllKeys())
ashemMMKV.removeValueForKey('setData')
LogUtil.i('testCrud - remove setData allKeys : ' + ashemMMKV.getAllKeys())
LogUtil.i('testCrud remove setData containsKey(setData) = ' + ashemMMKV.containsKey('setData'))
ashemMMKV.removeValuesForKeys(['boolDataTwo', 'stringDataTwo'])
LogUtil.i('testCrud - remove boolDataTwo&stringDataTwo allKeys : ' + ashemMMKV.getAllKeys())
LogUtil.i('testCrud mMapID = ' + ashemMMKV.getMMapID() + ' - isFileValid ' + MMKV.isFileValid(ashemMMKV.getMMapID()))
LogUtil.i('testCrud - cryptKey : ' + ashemMMKV.getCryptKey())
LogUtil.i('testCrud count = ' + ashemMMKV.count() + ', totalSize = ' + ashemMMKV.totalSize() + ', actualSize = ' + ashemMMKV.actualSize())
this.showMsg('testCrud count = ' + ashemMMKV.count() + ', totalSize = ' + ashemMMKV.totalSize() + ', actualSize = ' + ashemMMKV.actualSize())
}
/**
* test key-value
* @param mMapID
* @param cryptKey
* @param isEncode
* @param rootPath
*/
testInstance(mMapID: string, cryptKey: string, isEncode: boolean, rootPath?: string): MMKV {
LogUtil.i('testInstance start')
let kv = MMKV.getMMKVWithMMapID(mMapID, MMKV.SINGLE_PROCESS_MODE, cryptKey, rootPath);
if (isEncode) {
kv.encodeString('string', 'hello mmkv')
}
LogUtil.i('testInstance decodeString :' + kv.decodeString('string'))
if (isEncode) {
kv.encodeBool('bool', true)
}
LogUtil.i('testInstance decodeBool :' + kv.decodeBool('bool'))
if (isEncode) {
kv.encodeNumber('number', 1.111)
}
LogUtil.i('testInstance decodeNumber :' + kv.decodeNumber('number'))
if (isEncode) {
let set1 = new Set<string>()
set1.add('ss1')
set1.add('ss2')
set1.add('ss3')
set1.add('ss0')
kv.encodeSet('set1', set1)
}
LogUtil.i('testInstance decodeSet :' + kv.decodeSet('set1'))
this.showMsg('testInstance decodeSet :' + kv.decodeSet('set1'))
return kv
}
/**
* test clear
*/
clear() {
let mmkvTemp = this.testInstance('test/AES', 'Tencent MMKV', true, undefined)
mmkvTemp.clearAll()
LogUtil.i('allKeys = ' + mmkvTemp.getAllKeys())
}
/**
* show toast
* @param msg show massage
*/
showMsg(msg: string) {
// 整改后的代码
let option: ShowToastOptions = {
message: msg
}
prompt.showToast(option)
}
}
class MyICallBack implements ICallBack {
callBackResult(result: number): void {
if (result === 0) {
LogUtil.e("preferencesToMMKV error");
} else {
LogUtil.e("preferencesToMMKV success");
}
}
}
Loading...
马建仓 AI 助手
尝试更多
代码解读
代码找茬
代码优化
1
https://gitee.com/openharmony-tpc/MMKV.git
git@gitee.com:openharmony-tpc/MMKV.git
openharmony-tpc
MMKV
MMKV
master

Search