官方文檔:通過用戶首選項
實現數據持久化
目錄標題
- 使用場景
- 第1步:源碼
- 第2步:啟動模擬器
- 第3步:啟動entry
- 第6步:操作
- 樣例2
使用場景
- Preferences會將該數據緩存在內存中,當用戶讀取的時候,能夠快速從內存中獲取數據,當需要持久化時可以使用flush接口將內存中的數據寫入持久化文件中。
- Preferences會隨著存放的數據量越多而導致應用占用的內存越大,因此,Preferences不適合存放過多的數據,也不支持通過配置加密,適用的場景一般為應用保存用戶的個性化設置(字體大小,是否開啟夜間模式)等。
第1步:源碼
import { common } from '@kit.AbilityKit';
import dataPreferences from '@ohos.data.preferences';@Entry
@Component
struct Index {@State changeFontSize: number = 16;// 上下文private context: common.UIAbilityContext = getContext(this) as common.UIAbilityContext//1. 獲取preferenceprivate preferencesInstance: dataPreferences.Preferences = dataPreferences.getPreferencesSync(this.context, { name: 'myStore' });aboutToAppear(): void {//4. 頁面打開后,直接從preference中獲取上一次的數據let result = this.preferencesInstance.getSync("fontSizeKey", 16)this.changeFontSize = Number(result)}build() {Column() {Row({ space: 10 }) {Text('當前進度一覽').fontSize(this.changeFontSize)}.margin(20)Slider({value: this.changeFontSize,min: 14,max: 22,step: 2,style: SliderStyle.InSet}).showSteps(true).width('75%').onChange(async (value: number) => {this.changeFontSize = value//2. 保存數據this.preferencesInstance.putSync('fontSizeKey', this.changeFontSize);//3. 持久化數據this.preferencesInstance.flush()})}.backgroundColor('#f2f3f5').width('100%').height('100%')}
}
第2步:啟動模擬器
第3步:啟動entry
第6步:操作
樣例2
import dataPreferences from '@ohos.data.preferences';
import { common } from '@kit.AbilityKit';@Entry
@Component
struct Index_preferences2 {@State message: string = 'Hello World';private context:common.UIAbilityContext = getContext(this) as common.UIAbilityContextprivate preferencesInstance: dataPreferences.Preferences = dataPreferences.getPreferencesSync(this.context, { name: 'myStore' });aboutToAppear(): void {let result = this.preferencesInstance.getSync("messageKey","默認值1")this.message = String(result)}build() {Row() {Column() {TextInput({text:this.message}).fontSize(20).fontWeight(FontWeight.Bold).onChange((value)=>{this.message = value})Button("保存").onClick(()=>{this.preferencesInstance.putSync('message', this.message);this.preferencesInstance.flush()AlertDialog.show({message:"保存成功"})})Button("讀取").onClick(() => {let result = this.preferencesInstance.getSync("messageKey","默認值2")this.message = String(result)//獲取到的數據不是String,需要轉換一下AlertDialog.show({message:this.message})console.log("test",result)})}.width('100%')}.height('100%')}
}