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

五、总结

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

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

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

相关推荐
陈随易16 小时前
bm2,Node.js 与 Bun 项目部署新选择
前端·后端·程序员
福兮说17 小时前
canvas 旋转图片的六个坑:四角被裁、Math.ceil 多出 1px 黑边、JPG 角发黑、翻转方向反了
前端·javascript·图像处理·canvas
熊猫钓鱼>_>17 小时前
Kotlin Multiplatform for OpenHarmony 实战:为 KMPNotifier 实现 OpenHarmony 本地通知引擎
kotlin·ai编程·harmonyos·鸿蒙·openharmony·适配·kmp
传人once19 小时前
多图片上传预览功能如何写
前端·css·html·jquery·html5
Eric.4619 小时前
Wan‑Animate+MiniMax-H3 本地部署 AI 漫剧流水线:8G 显存动作迁移与动态分镜工程实战
前端·人工智能·comfyui·ai漫剧
库拉镜像AI牛牛21 小时前
短剧内容自动化生产:知漫剧工作室落地教程
大数据·服务器·前端·人工智能·语音识别
律宏阔21 小时前
Flutter 列表图片内存优化:CachedNetworkImage 与 ClipRRect 的取舍
前端·flutter
行者全栈架构师21 小时前
【鸿蒙心迹】相册文搜图工程化落地:HarmonyOS 7.0 端侧 AI 检索全链路实战与 5 个踩坑解法
前端
特立独行的猫A21 小时前
cj-tauri开源项目介绍与imovie观影客户端项目实战
harmonyos
律宏阔21 小时前
Dart 3 Record:解决 Future.wait 异构返回值的类型问题
前端·flutter