鸿蒙开发排坑:解决 resourceManager.getRawFileContent() 获取文件内容为空问题

一、问题背景

在鸿蒙开发过程中,我遇到了一个让人头疼的问题。当使用 resourceManager.getRawFileContent() 方法加载 rawfile 目录下的 test.json 文件时,控制台输出了 The file content is empty. 错误信息,并且获取到的 Uint8Array 长度为 0。这意味着文件内容没有被正确加载,让我后续的开发工作陷入了困境。

js 复制代码
// 关键代码片段 
getContext(this).resourceManager.getRawFileContent("test.json").then((value: Uint8Array) => { 
if (value.length === 0) {
    console.error("The file content is empty."); 
   } 
});

二、艰辛探索历程

为了解决这个问题,我花费了整整两天两夜的时间,不断地进行研究和探索。查阅了大量的官方文档、技术博客,尝试了各种可能的解决方案,在代码的海洋里不断地试错和调试。过程中充满了挫败感,但我始终没有放弃,终于找到了问题的解决办法。

三、解决方案

1. 确保路径正确

在使用 resourceManager.getRawFileContent() 方法时,文件路径的正确性至关重要。需要仔细检查文件路径是否准确无误,确保文件确实存在于指定的 rawfile 目录下。同时,要注意路径的大小写,因为在某些系统中,文件路径是区分大小写的。

2. 使用模拟器查看

这是解决问题的关键所在。在开发过程中,我一开始使用的是 Preview 进行查看,结果一直出现文件内容为空的问题。后来尝试使用模拟器进行查看,问题竟然神奇地解决了。推测可能是 Preview 在资源加载方面存在一些局限性,而模拟器更能真实地模拟应用的运行环境,从而避免了此类问题的出现。

四、完整源代码

由于之前的项目一直不成功,我最后干脆新开了一个项目进行测试。以下就是完整的代码:

js 复制代码
import { BusinessError } from '@kit.BasicServicesKit';
import { util, buffer } from '@kit.ArkTS';

@Entry
@Component
struct JSONTestPage {
  private TAG: string = "JSONTestPage";
  @State showText: string = "";

  aboutToAppear(): void {
    this.getRawJson();
  }

  /**
   * 获取JSON
   */
  private getRawJson() {
    try {
      getContext(this).resourceManager.getRawFileContent("test.json").then((value: Uint8Array) => {
        console.log('value:', value);
        if (value.length === 0) {
          console.error("The file content is empty.");
          return;
        }
        let decoder = util.TextDecoder.create('utf-8');
        let json = decoder.decodeToString(value);
        console.info(this.TAG, "json: " + json);
        this.showText = json ;
      }).catch((error: BusinessError) => {
        console.error("getRawFileContent promise error is " + JSON.stringify(error));
      });
    } catch (error) {
      let code = (error as BusinessError).code;
      let message = (error as BusinessError).message;
      console.error(`promise getRawFileContent failed, error code: ${code}, message: ${message}.`);
    }
  }

  build() {
    Scroll() {
      Row() {
        Text(this.showText)
          .fontSize(25)
          .fontWeight(FontWeight.Bold)
          .fontColor('#000')
      }
    }
    .height('100%')
    .width('100%')
  }
}

五、总结

通过这次经历,我深刻体会到了在鸿蒙开发过程中遇到问题时,不能轻易放弃,要耐心地去探索和尝试。同时,要注意开发工具的使用,不同的工具可能会对开发结果产生影响。希望我的经验能对其他鸿蒙开发者有所帮助,避免大家在开发过程中踩同样的坑。如果大家在开发过程中遇到了类似的问题,不妨按照上述方法进行尝试,相信问题一定能够得到解决。

在鸿蒙开发的道路上,我们会不断遇到新的挑战,但只要我们保持积极的心态,勇于探索,就一定能够克服困难,取得成功。让我们一起在鸿蒙开发的海洋中乘风破浪,创造出更加优秀的应用!

大家如果在鸿蒙开发中还有其他问题或者有更好的解决方案,欢迎在评论区留言交流,让我们共同进步!

相关推荐
西陵20 分钟前
为什么说 AI 赋能前端开发,已经不是选择题,而是必然趋势?
前端·架构·ai编程
by__csdn1 小时前
Vue3 setup()函数终极攻略:从入门到精通
开发语言·前端·javascript·vue.js·性能优化·typescript·ecmascript
天天扭码2 小时前
前端如何实现RAG?一文带你速通,使用RAG实现长期记忆
前端·node.js·ai编程
Luna-player2 小时前
在前端中,<a> 标签的 href=“javascript:;“ 这个是什么意思
开发语言·前端·javascript
lionliu05192 小时前
js的扩展运算符的理解
前端·javascript·vue.js
小草cys3 小时前
项目7-七彩天气app任务7.4.2“关于”弹窗
开发语言·前端·javascript
奇舞精选3 小时前
GELab-Zero 技术解析:当豆包联手中兴,开源界如何守住端侧 AI 的“最后防线”?
前端·aigc
奇舞精选3 小时前
Vercel AI SDK:构建现代 Web AI 应用指南
前端·aigc
waeng_luo3 小时前
[鸿蒙2025领航者闯关]HarmonyOS路由跳转
harmonyos·鸿蒙2025领航者闯关·鸿蒙6实战·开发者年度总结
神仙别闹3 小时前
基于C语言实现B树存储的图书管理系统
c语言·前端·b树