HarmonyOS鸿蒙Next中har中拿不到数据
HarmonyOS鸿蒙Next中har中拿不到数据
我在entry中初始化preferences
createFontPreferences(context: Context) {
let fontPreferences: Function = (() => {
let preference: Promise<preferences.Preferences> = preferences.getPreferences(context, PREFERENCES_NAME);
return preference;
});
GlobalContext.getContext().setObject('getFontPreferences', fontPreferences);
let getFontPreferences: Function = GlobalContext.getContext().getObject('getFontPreferences') as Function;
}
然后再hsp中设置preferences
saveChangeFontSize(fontSize: number) {
let getFontPreferences: Function = GlobalContext.getContext().getObject('getFontPreferences') as Function;
getFontPreferences().then(async (preferences: preferences.Preferences) => {
await preferences.put(KEY_APP_FONT_SIZE, fontSize);
preferences.flush();
}).catch((err: Error) => {
Logger.error(TAG, 'put the preferences failed, err: ' + err);
});
}
然后preferencesutils类在har中,hsp,entry都是调用har的utils,但是拿不到这个
let getFontPreferences: Function = GlobalContext.getContext().getObject('getFontPreferences') as Function;
提示undefined怎么办
更多关于HarmonyOS鸿蒙Next中har中拿不到数据的实战教程也可以访问 https://www.itying.com/category-93-b0.html
创建工具类 ---> Preferences.ts
```javascript
import dataPreferences from '[@ohos](/user/ohos).data.preferences';
class Preferences {
preMap: Map<string, dataPreferences.Preferences> = new Map();
async loadPreference(context, name: string) {
try {
// 获取Preferences实例
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)
console.log('testTag',`读取Preferences[${name}.${key} = ${value}]成功`);
return value;
} catch (e) {
console.log('testTag',`读取Preferences[${name}.${key}]失败`,JSON.stringify(e));
}
}
async putPreferenceValue(name:string,key:string,value:dataPreferences.ValueType) {
if (!this.preMap.has(name)) {
console.log('testTag',`Preferences[${name}]未初始化`);
return;
}
try {
let pref = this.preMap.get(name);
// 写入数据
await pref?.put(key,value);
// 刷新磁盘
await pref?.flush();
console.log('testTag',`保存Preferences[${name}.${key} = ${value}]成功`);
} catch (e) {
console.log('testTag',`保存Preferences[${name}.${key} = ${value}]失败`,JSON.stringify(e));
}
}
}
const preferenceUtil = new Preferences();
export default preferenceUtil as Preferences
使用:
1、在EntryAbility.ets 导入
import PreferencesUtil from '../common/util/PreferencesUtil'
2、
async onCreate(want, launchParam) {
hilog.info(0x0000, 'testTag', '%{public}s', 'Ability onCreate running');
// 加载Preferences
await PreferencesUtil.loadPreference(this.context, 'MyPreferences')
}
更多关于HarmonyOS鸿蒙Next中har中拿不到数据的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html
在HarmonyOS鸿蒙Next中,如果无法从HAR(HarmonyOS Ability Resources)中获取数据,可能是由于以下原因导致的:
-
资源文件路径错误:确保在代码中引用的资源路径正确,路径应与HAR包中的实际路径一致。
-
HAR包未正确导入:检查项目是否成功导入了HAR包。可以通过查看
oh-package.json5文件确认依赖是否添加正确。 -
资源ID冲突:如果项目中存在多个HAR包,且资源ID重复,可能会导致资源获取失败。确保资源ID在项目中唯一。
-
资源未正确编译:确认HAR包中的资源文件已正确编译并打包。可以通过检查
build目录下的资源文件是否存在来确认。 -
权限问题:某些资源可能需要特定的权限才能访问,确保应用已获取所需的权限。
-
版本兼容性问题:鸿蒙Next版本可能与HAR包的版本不兼容,导致资源无法正确加载。检查HAR包与鸿蒙Next版本的兼容性。
-
资源加载时机问题:确保在资源加载时,相关的上下文环境已正确初始化。资源加载时机过早或过晚可能导致获取失败。
-
资源类型不匹配:确认获取的资源类型与代码中使用的类型一致。例如,字符串资源应使用
getString方法获取,而非其他类型的方法。
如果以上问题均已排除,建议检查日志输出,查看是否有相关的错误信息提示,以便进一步定位问题。
在HarmonyOS鸿蒙Next中,HAR(HarmonyOS Ability Resource)模块无法获取数据,可能是以下原因导致的:
- 资源路径错误:确保在代码中引用的资源路径与HAR模块中的实际路径一致。
- 资源未正确打包:在构建HAR模块时,资源文件未正确打包到HAR中,需检查
oh-package.json5配置。 - 跨模块访问限制:如果从其他模块访问HAR资源,需确保已正确配置模块依赖关系。
- 运行时权限问题:检查应用是否具备访问相关资源的权限。
建议使用DevEco Studio的调试工具检查资源加载情况,并确保HAR模块配置正确。

