鸿蒙开发排坑:解决 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%')
  }
}

五、总结

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

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

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

相关推荐
2501_9437823535 分钟前
【共创季稿事节】猜数字游戏:二分法思维与交互式反馈
前端·游戏·microsoft·harmonyos·鸿蒙·鸿蒙系统
想你依然心痛1 小时前
AtomCode 在 HarmonyOS 开发环境中的表现测评
跨平台·harmonyos·arkts·信创·国产系统
GV191rLvq1 小时前
基于Socket实现的最简单的Web服务器【ASP.NET原理分析】
服务器·前端·asp.net
吠品1 小时前
LangChain 里 tool_call_id 为空?一次 MCP 工具集成的排查记录
前端
柒和远方1 小时前
Phase 7.4 学习博客:为什么多 API 项目需要 Swagger / OpenAPI
前端·后端·架构
张龙6871 小时前
拼多多开放平台对接踩坑实录:从 CLIENT_ID 配置到 MD5 签名算法的完整填坑指南
前端
GuWenyue1 小时前
提示词彻底过时?一套上下文工程方案,3步让LLM落地生产,代码直接复用
前端·javascript·人工智能
柒和远方1 小时前
Phase 7.3 复盘:后台任务不只是“扔进队列”,还要能被看见
前端·后端·架构
2501_943782352 小时前
【共创季稿事节】 倒计时器:时分秒选择器与定时器的协同工作
前端·华为·harmonyos·鸿蒙·鸿蒙系统
TrisighT2 小时前
Electron 鸿蒙 PC 上做本地搜索,Fuse.js 比 SQLite 快 6 倍——但我愣是选了最慢的方案
electron·sqlite·harmonyos