HarmonyOS 鸿蒙Next 本地化存储代码报错,请求大佬指点一下

发布于 1周前 作者 sinazl 最后一次编辑是 5天前 来自 鸿蒙OS

HarmonyOS 鸿蒙Next 本地化存储代码报错,请求大佬指点一下

代码定义 

import preferences from '@ohos.data.preferences';

class PreferencesUtil {
  //设置数据
  async set(storeName: string, key: string, value: preferences.ValueType) {
    try {
      let context: Context = getContext(this)
      let pref = await preferences.getPreferences(context, storeName)
      //写入数据
      await pref.put(key, value)
      //flush将Preferences实例持久化
      await pref.flush()
    } catch (e) {
      console.log('testTag', `保存preferences失败`, JSON.stringify(e));
    }
  }

  //获取数据
  async get(storeName: string, key: string, defValue: preferences.ValueType) {
    try {
      let context: Context = getContext(this)
      let pref = await preferences.getPreferences(context, storeName)
      //获取数据
      let data = await pref.get(key, defValue)
      return data
    } catch (e) {
      console.log('testTag', `获取数据失败`, JSON.stringify(e));
      return ""
    }
  }

  //删除数据
  async delete(storeName: string, key: string) {
    try {
      let context: Context = getContext(this)
      let pref = await preferences.getPreferences(context, storeName)
      //删除数据
      await pref.delete(key)
    } catch (e) {
      console.log('testTag', `删除数据`, JSON.stringify(e));
    }
  }
}

let preferencesUtil = new PreferencesUtil()

export default preferencesUtil

代码调用

import preferencesUtil from '../../common/PerferencesUtil'

await preferencesUtil.set('searchStore','userName','测试姓名')

报错截图

cke_13191.png
6 回复
let context: Context = getContext(this)你换成AppStorage.get('context') 在入口处onCreate()中setOrCreate('context') ,有时候getContext(this)不好使用


现在不是都用@kit.ArkData 这个库么?

为什么还要用'@ohos.data.preferences'这个库呀

@kit.ArkData 是这个库,我那个代码是旧的

// 你的代码没问题 我验证是OK的 我这边的api是5.0.1.112 (API Version 13 Release) 
import preferences from '@ohos.data.preferences';

class PreferencesUtil { //设置数据 async set(storeName: string, key: string, value: preferences.ValueType) { try { let context: Context = getContext(this) let pref = await preferences.getPreferences(context, storeName) //写入数据 await pref.put(key, value) //flush将Preferences实例持久化 await pref.flush() } catch (e) { console.log(‘testTag’, 保存preferences失败, JSON.stringify(e)); } }

//获取数据 async get(storeName: string, key: string, defValue: preferences.ValueType) { try { let context: Context = getContext(this) let pref = await preferences.getPreferences(context, storeName) //获取数据 let data = await pref.get(key, defValue) return data } catch (e) { console.log(‘testTag’, 获取数据失败, JSON.stringify(e)); return “” } }

//删除数据 async delete(storeName: string, key: string) { try { let context: Context = getContext(this) let pref = await preferences.getPreferences(context, storeName) //删除数据 await pref.delete(key) } catch (e) { console.log(‘testTag’, 删除数据, JSON.stringify(e)); } } }

let preferencesUtil = new PreferencesUtil()

export default preferencesUtil

@Component @Entry struct PreferencesUtilDemo { build() { Button(“点击”).onClick(async ()=>{ await preferencesUtil.set(‘searchStore’,‘userName’,‘测试姓名’) preferencesUtil.get(‘searchStore’,‘userName’,‘测试姓名111’).then((res)=>{ console.error(res.toString()+“xxxx”) }) }) } }<button style="position: absolute; padding: 4px 8px 0px; cursor: pointer; top: 8px; right: 8px; font-size: 14px;">复制</button>

模拟器运行可以了,看着代码应该没问题

针对你提到的HarmonyOS 鸿蒙Next 本地化存储代码报错的问题,这里有几个可能的解决方向:

  1. 检查权限设置:确保你的应用已经正确声明并请求了存储权限。在config.json文件中添加必要的权限声明,并在代码中动态请求权限。

  2. 路径问题:检查你使用的文件路径是否正确。鸿蒙系统对文件存储路径有特定要求,确保你使用的是系统推荐或提供的API来构建路径。

  3. API调用错误:查看报错信息,确认是否因为API调用不当导致。例如,文件读写操作是否使用了正确的参数和对象。

  4. 版本兼容性:确认你的开发环境(包括IDE、SDK版本等)与目标设备或模拟器的鸿蒙系统版本兼容。

  5. 日志分析:详细查看和分析应用运行时的日志输出,这可以提供更多关于错误原因的线索。

  6. 示例代码对比:参考华为官方提供的存储相关示例代码,对比并找出可能的差异或错误。

如果问题依旧没法解决请联系官网客服,官网地址是:https://www.itying.com/category-93-b0.html 。希望这些信息能帮助你解决问题。

回到顶部