HarmonyOS鸿蒙Next Stage模型中有什么办法可以在封装的文件内获取到context

HarmonyOS鸿蒙Next Stage模型中有什么办法可以在封装的文件内获取到context 使用ohos.data.preference这个数据缓存时,想要将获取值设置值删除值封装成方法,但是Stage模型中有什么办法可以在封装的文件内获取到context

5 回复

第一种方案:context可以作为参数传递过去。第二种方案:context可以先存储在本地,需要的时候获取。这里演示第一种方案:

new PrefrenceUtils(getContext(this) as Context).saveInfo('name','zhangsan').then((res: string)=>{
  if (res == 'success') {
    console.log('save success!!!!!!!!!')
  }
})
new PrefrenceUtils(getContext(this) as Context).getInfo('name','lisi').then((res: dataPreferences.ValueType)=>{
  console.log('get success!!!!!!!!!'+res)
})

export default class PrefrenceUtils {
  context: Context
  constructor(context: Context) {
    this.context = context
  }

  saveInfo(key: string, value: number | string | boolean): Promise<string> {
    return new Promise((resolve,reject)=>{
      let promise = dataPreferences.getPreferences(this.context, 'myStore');
      console.log('promise---',promise)
      promise.then((object: dataPreferences.Preferences) => {
        object.put(key, value, (err: BusinessError) => {
          if (err) {
            reject('fail')
          } else {
            resolve('success')
          }
        })
        console.info("Succeeded in getting preferences.");
      }).catch((err: BusinessError) => {
        reject(err)
        console.error("Failed to get preferences. code ="+err.code+", message ="+err.message);
      })
    })
  }

  saveInfoSync(key: string, value: dataPreferences.ValueType) {
    let promise = dataPreferences.getPreferences(this.context, 'myStore');
    console.log('promise---',promise)
    promise.then((object: dataPreferences.Preferences) => {
      object.putSync(key, value)
      console.info("Succeeded in getting preferences.");
    }).catch((err: BusinessError) => {
      console.error("Failed to get preferences. code ="+err.code+", message ="+err.message);
    })
  }

  getInfo(key: string,defaultValue: dataPreferences.ValueType): Promise<dataPreferences.ValueType> {
    return new Promise((resolve,reject)=>{
      let promise = dataPreferences.getPreferences(this.context, 'myStore');
      console.log('promise---',promise)
      promise.then((object: dataPreferences.Preferences) => {
        object.get(key, defaultValue, (err: BusinessError, val: dataPreferences.ValueType) => {
          if (err) {
            reject('fail')
          } else {
            resolve(val)
          }
        })
        console.info("Succeeded in getting preferences.");
      }).catch((err: BusinessError) => {
        reject(err)
        console.error("Failed to get preferences. code ="+err.code+", message ="+err.message);
      })
    })
  }

  getInfoSync(key: string,defaultValue: dataPreferences.ValueType): Promise<dataPreferences.ValueType> {
    return new Promise((resolve,reject)=>{
      let promise = dataPreferences.getPreferences(this.context, 'myStore');
      console.log('promise---',promise)
      promise.then((object: dataPreferences.Preferences) => {
        resolve(object.getSync(key, defaultValue))
        console.info("Succeeded in getting preferences.");
      }).catch((err: BusinessError) => {
        reject(err)
        console.error("Failed to get preferences. code ="+err.code+", message ="+err.message);
      })
    })
  }
}

更多关于HarmonyOS鸿蒙Next Stage模型中有什么办法可以在封装的文件内获取到context的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


在 windowcreate 的时候存到 AppStorage 里

import { common } from ‘@kit.AbilityKit’;

export class PreferenceManager { private preferences?: preferences.Preferences; private context = this.getContext() as common.UIAbilityContext; … }

在HarmonyOS的Next Stage模型中,若要在封装的文件内获取到context,可以通过AbilityContextApplicationContext来实现。AbilityContext通常用于与Ability相关的操作,而ApplicationContext则用于与应用生命周期相关的操作。

在Ability中,可以直接通过this.context获取到AbilityContext。如果是在其他类或方法中,可以通过构造函数或方法参数将context传递进去。例如:

class MyClass {
  private context: AbilityContext;

  constructor(context: AbilityContext) {
    this.context = context;
  }

  public someMethod() {
    // 使用this.context进行操作
  }
}

如果是在UI组件中,可以通过getContext()方法获取到context。例如:

class MyComponent extends Component {
  public someMethod() {
    const context = this.getContext();
    // 使用context进行操作
  }
}

此外,如果需要在全局范围内获取ApplicationContext,可以通过globalThis.abilityContextglobalThis.applicationContext来获取。

const context = globalThis.abilityContext; // 或 globalThis.applicationContext

这些方法可以帮助你在封装的文件内获取到所需的context对象。

在HarmonyOS的Next Stage模型中,可以通过AbilityContext获取上下文。首先,确保你的类继承自AbilityPageAbility,然后使用getContext()方法获取AbilityContext。例如:

AbilityContext context = getContext();

如果是在其他非Ability类中,可以通过构造函数或方法参数传递AbilityContext。例如:

public class MyClass {
    private AbilityContext context;

    public MyClass(AbilityContext context) {
        this.context = context;
    }
}

这样可以确保在任何封装的文件内都能访问到context

回到顶部