HarmonyOS鸿蒙Next中getContext() 为undefined问题
HarmonyOS鸿蒙Next中getContext() 为undefined问题 获取Preferences需要使用context,如果在静态成员变量初始化时获取context会返回undefined,鸿蒙有全局的context吗?
3 回复
这种调用场景是不支持的,看下下面demo:
封装好的工具类:
// EntryAbility.ets 调用
onCreate(want: Want, launchParam: AbilityConstant.LaunchParam): void {
hilog.info(0x0000, 'testTag', '%{public}s', 'Ability onCreate');
PreferencesUtil.loadPreference(this.context, 'MyPreferences');
}
import dataPreferences from '@ohos.data.preferences';
import { ValueType } from '@kit.ArkData';
class Preferences {
preMap: Map<string, dataPreferences.Preferences> = new Map();
async loadPreference(context, name: string) {
try {
let pref = await dataPreferences.getPreferences(context, name);
this.preMap.set(name, pref);
console.log('testTag', `加载Preference[${name}]成功`);
} catch (e) {
console.log('testTag', `加载Preference[${name}]失败`, JSON.stringify(e));
}
}
async getPreferenceValue(name: string, key: string, defaultValue: dataPreferences.ValueType) {
if (!this.preMap.has(name)) {
console.log('testTag', `Preferences[${name}]未初始化`);
return;
}
try {
let pref = this.preMap.get(name);
// 读取数据
let value = await pref?.get(key, defaultValue);
return value;
} catch (e) {
console.error('Error getting preference value:', e);
}
}
async putPreferenceValue(name: string, key: string, value: dataPreferences.ValueType) {
if (!this.preMap.has(name)) {
return;
}
try {
let pref = this.preMap.get(name);
// 写入数据
await pref?.put(key, value);
// 刷新磁盘
await pref?.flush();
} catch (e) {
console.error('Error putting preference value:', e);
}
}
/**
* 删除键值
* @param name
* @param key
* @param value
*/
async deleteKeyPreferenceValue(name: string, key: string, value: dataPreferences.ValueType) {
if (!this.preMap.has(name)) {
return;
}
try {
let pref = this.preMap.get(name);
// 写入数据
await pref?.delete(key);
// 刷新磁盘
await pref?.flush();
} catch (e) {
console.error('Error deleting preference key:', e);
}
}
/**
* 删除文件的 preference 实例
* @param context
* @param name
*/
async deletePreference(context, name: string) {
if (!this.preMap.has(name)) {
return;
}
try {
await dataPreferences.deletePreferences(context, name);
} catch (e) {
console.error('Error deleting preferences:', e);
}
this.preMap.delete(name);
}
}
const preferenceUtil = new Preferences();
export default preferenceUtil as Preferences;
更多关于HarmonyOS鸿蒙Next中getContext() 为undefined问题的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html
在HarmonyOS(鸿蒙)Next中,getContext()
返回 undefined
通常是由于以下原因:
-
未正确初始化上下文:确保在调用
getContext()
之前,组件或页面已经正确初始化。例如,在onInit
或onReady
生命周期钩子中调用。 -
作用域问题:
getContext()
只能在组件或页面内部调用,确保你在正确的上下文中使用它。 -
API 变更:鸿蒙OS版本更新可能导致API变更,请查阅最新文档确认
getContext()
的使用方式。 -
异步问题:如果在异步操作中调用
getContext()
,确保上下文已经准备好。
建议在调用前检查上下文是否存在,并确保在合适的生命周期钩子中使用。