HarmonyOS鸿蒙Next中Preference在App启动Abililty的onCreate里面执行调用会抛异常

HarmonyOS鸿蒙Next中Preference在App启动Abililty的onCreate里面执行调用会抛异常

我发现如果在App启动的时候在Ability的onCreate方法里面立刻执行SP的存储或者读取操作会有异常,

```typescript
export class StorageUtils {
  static async putValue(key: string, value: any, context: any) {
    if (context) {
      let promise = await dataStorage.getPreferences(context, 'mystore')
      promise.put(key, value)
      promise.flush()
    } else {
      throw new Error("StorageUtils:putValue error");
    }
  }

  static async getValueByKey(key: string, defaultValue: any, context: any): Promise {
    if (context) {
      let promise = await dataStorage.getPreferences(context, 'mystore')
      let value = promise.get(key, defaultValue)
      promise.flush()
      return value
    } else {
      throw new Error("StorageUtils:getValueByKey error");
    }
  }
}

例如这个demo,会抛异常:Error: StorageUtils:getValueByKey error


更多关于HarmonyOS鸿蒙Next中Preference在App启动Abililty的onCreate里面执行调用会抛异常的实战教程也可以访问 https://www.itying.com/category-93-b0.html

3 回复

你的代码中,判断context不存在,就抛出你日志中的异常,在oncreate中调用StorageUtils时,将其他context传过去,就不会有问题了

更多关于HarmonyOS鸿蒙Next中Preference在App启动Abililty的onCreate里面执行调用会抛异常的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


在HarmonyOS鸿蒙Next中,PreferenceApp启动AbilityonCreate方法中调用可能会导致异常。这是因为onCreate是Ability生命周期的初始阶段,此时系统可能尚未完全初始化,导致Preference无法正确加载或访问相关资源。具体来说,Preference依赖于上下文环境和系统服务,而在onCreate阶段,这些依赖可能还未准备就绪。

为了避免异常,可以在onStartonActive生命周期方法中调用Preference,因为这些阶段系统已经完成初始化,资源和服务都已可用。此外,确保在调用Preference时,上下文环境已经正确传递,并且相关权限已经获取。

在鸿蒙Next中,Preference主要用于存储和获取应用的轻量级数据,类似于键值对存储。如果必须在onCreate中使用Preference,可以考虑延迟初始化或使用异步任务来确保系统资源已准备就绪。

在HarmonyOS鸿蒙Next中,Preference的调用如果在AbilityonCreate方法中执行,可能会抛出异常。这是因为Preference依赖于系统的上下文环境,而onCreate方法执行时,上下文环境可能尚未完全初始化。建议将Preference的调用移至onStartonActive方法中,确保上下文环境已准备就绪,从而避免异常。

回到顶部