HarmonyOS鸿蒙Next中为什么我按照官方的示例读取到的字节为0
HarmonyOS鸿蒙Next中为什么我按照官方的示例读取到的字节为0
this.getUIContext().getHostContext()?.resourceManager.getRawFileContent('BannerData.json').then(value => {
this.bannerList = JSON.parse(bufferToString(value)) as BannerClass[];
});
在HarmonyOS Next中,读取字节为0通常是由于文件路径错误、权限未配置或文件为空所致。请检查文件是否存在于指定路径,并确认ohos.permission.READ_USER_STORAGE权限已在module.json5中正确声明。另外,确保使用正确的API(如fs.openSync)打开文件并调用fs.readSync进行读取操作。
更多关于HarmonyOS鸿蒙Next中为什么我按照官方的示例读取到的字节为0的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html
在HarmonyOS Next中,使用getRawFileContent
读取文件返回字节为0,通常有以下原因:
-
文件路径或名称错误:确认
BannerData.json
是否位于resources/rawfile
目录下,且文件名大小写匹配(HarmonyOS对资源路径区分大小写)。 -
异步加载未完成:
getRawFileContent
返回Promise,需确保在then回调中处理数据。检查是否有未捕获的异常导致中断。 -
bufferToString转换问题:
value
为ArrayBuffer类型,需通过new TextDecoder().decode(value)
转换为字符串,再使用JSON.parse
。示例代码中的bufferToString
需确认是自定义方法还是API,若未正确定义会导致解析失败。 -
资源未同步或打包问题:开发阶段修改文件后需重新编译(DevEco Studio中点击Build),否则可能读取到旧缓存或空内容。
建议直接使用以下标准代码替换:
this.getUIContext().getHostContext()?.resourceManager.getRawFileContent('BannerData.json').then(value => {
const str = new TextDecoder().decode(value); // 明确转换ArrayBuffer
this.bannerList = JSON.parse(str) as BannerClass[];
}).catch(error => {
console.error("读取文件失败:", error); // 添加错误捕获
});
若问题仍存在,检查DevEco Studio的编译日志,确认json文件是否成功打包至HAP中。