HarmonyOS 鸿蒙Next preferences调用问题

发布于 1周前 作者 zlyuanteng 来自 鸿蒙OS

HarmonyOS 鸿蒙Next preferences调用问题

//公共定义用户首选项
//导入模块
import {common} from '@kit.AbilityKit’
import { preferences } from ‘@kit.ArkData’;
let dataPreferences: preferences.Preferences | null = null;

export default class PreferencesUtils {
private context = getContext(this) as common.UIAbilityContext
getPreferences(){
try{
let options: preferences.Options = { name: ‘myStore’ };
dataPreferences = preferences.getPreferencesSync(this.context, options);
}catch(error){
console.info(‘error getPreferences’)
console.error(‘error getPreferences’)
}
}

//定义方法
//存 putSync(key: string, value: ValueType): void 此为同步接口。
write(key:string,value:string){
//判断preference对象是否存在
if(!dataPreferences){
this.getPreferences()
};
try{
dataPreferences!!.putSync(key, value);
//持久化存储
dataPreferences!!.flush();
}catch(error){
console.info(‘error getPreferences write’)
console.error(error)
}
}

//获取
// getSync(key: string, defValue: ValueType): ValueType 此为同步接口。
read(key: string, defValue?: string):string | undefined{
//判断preference对象是否存在
if(!dataPreferences){
this.getPreferences()
};
let value: preferences.ValueType | undefined = undefined;
try{
value = dataPreferences!!.getSync(key,defValue);
}catch(error){
console.info(‘error getPreferences read’)
console.error(error)
}
return value as string | undefined //返回的是string | undefined
}
}
根据上面封装 我调用的时候
read提示: TypeError: Cannot read property getSync of undefined

write提示: TypeError: Cannot read property putSync of undefined


更多关于HarmonyOS 鸿蒙Next preferences调用问题的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html

4 回复

您好,我这边写了个简单的demo,没问题可以获取到write进去的值;您看下是不是您调用的不对?

Index.ets为

import PreferencesUtils from './index01'


let test: PreferencesUtils = new PreferencesUtils();
@Entry
@Component
struct Index {
  build() {
    Row() {
      Column({ space: 10 }) {
        Button('test1')
          .onClick(() => {

            test.getPreferences();
          })

        Button('test2')
          .onClick(() => {
            test.write('aa', 'bb');
          })

        Button('test3')
          .onClick(() => {
            test.read('aa')
          })
      }
      .width('100%')
    }
    .height('100%')
    .backgroundColor(0xF1F3F5)
  }
}

index01.ets为

import { common } from '@kit.AbilityKit'
import { preferences } from '@kit.ArkData';

let dataPreferences: preferences.Preferences | null = null;

export default class PreferencesUtils {
  private context = getContext(this) as common.UIAbilityContext

  getPreferences() {
    try {
      let options: preferences.Options = {
        name: 'myStore'
      };
      dataPreferences = preferences.getPreferencesSync(this.context, options);
      console.info('success getPreferences' + dataPreferences)

    } catch (error) {
      console.info('error  getPreferences')
      console.error('error  getPreferences')
    }
  }

  //定义方法
  //存  putSync(key: string, value: ValueType): void   此为同步接口。
  write(key: string, value: string) {
    //判断preference对象是否存在
    if (!dataPreferences) {
      this.getPreferences()
    }
    ;
    try {
      dataPreferences!!.putSync(key, value);

      //持久化存储
      dataPreferences!!.flush();
    } catch (error) {
      console.info('error  getPreferences write')
      console.error(error)
    }
  }

  //获取
  // getSync(key: string, defValue: ValueType): ValueType 此为同步接口。
  read(key: string, defValue?: string): string | undefined {
    //判断preference对象是否存在
    if (!dataPreferences) {
      this.getPreferences()
    }
    ;
    let value: preferences.ValueType | undefined = undefined;
    try {
      value = dataPreferences!!.getSync(key, defValue);
      console.info('success read ' + value)

    } catch (error) {
      console.info('error  getPreferences read')
      console.error(error)
    }
    return value as string | undefined //返回的是string | undefined
  }
}

index01是用的您封装的,加了几个日志;

依次点击三个按钮,可以得出 写进去的值’bb’

更多关于HarmonyOS 鸿蒙Next preferences调用问题的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


我在手机上获取模拟器没问题 在预览器就不行

抱歉,预览器功能受限,仅支持简单的ui调试,您可以尝试模拟器调试;最好是使用真机调试!

在HarmonyOS鸿蒙系统中,处理Next preferences调用问题通常涉及到对系统API的正确使用以及确保数据在不同组件或页面间正确传递。以下是对这一问题的直接回答:

HarmonyOS中的Next preferences调用,如果指的是跨页面或组件传递数据,应使用Intent或全局变量(如DataAbility)来实现。首先,确保你在发送页面正确设置了Intent的putExtra方法,将需要传递的数据封装进去。例如,使用Intent intent = new Intent(); intent.putExtra("key", value); startAbility(intent);来发送数据。

在接收页面,通过Intent intent = getIntent();获取Intent,并使用intent.getStringExtra("key")等方法提取数据。如果数据量大或结构复杂,考虑使用序列化对象或DataAbility来存储和访问。

此外,确保在manifest.json中正确配置了所需的权限和路由信息,以允许页面间的数据传递。

如果问题出现在数据未能正确传递或接收,检查以下几点:

  • Intent的key值是否一致。
  • 数据类型是否匹配。
  • 页面路由配置是否正确。
  • 是否有权限限制导致数据无法访问。

如果问题依旧没法解决请联系官网客服,官网地址是:https://www.itying.com/category-93-b0.html

回到顶部