【自用】HarmonyOS Next 开发中错误收集

323 阅读1分钟

问题:

Reason:WINDOW_EXCEPTION_DETECTION
syswarning: WINDOW_EXCEPTION_DETECTION WINDOW_EXCEPTION_DETECTION at 20241223154611
DisplayPowerInfo:powerState:UNKNOWN
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
DOMAIN:WINDOWMANAGER
STRINGID:WINDOW_EXCEPTION_DETECTION
TIMESTAMP:2024/12/23-15:46:11:144
PID:3661
UID:20020051
PACKAGE_NAME:
PROCESS_NAME:

办法: CrashLog中报错syswarning,检查发现,是 onWindowStageCreate(windowStage: window.WindowStage): void 以下设置的Page被删除了导致的,换成正确的page即可解决;

windowStage.loadContent('pages/Index', (err) => {
  ....
});


问题: “NODE HOME is set to an invalid directory, check /usr/local/bin“

办法:

检查Node.js安装路径

which node

设置NODE_HOME环境变量

echo 'export NODE_HOME=/usr/local/bin/node' >> ~/.bashrc or ~/.zshrc echo 'export PATH=$NODE_HOME/bin:$PATH' >> ~/.bashrc or ~/.zshrc

刷新配置

source ~/.bashrc or ~/.zshrc

验证配置

echo $NODE_HOME


问题:Error: The hvigor depends on the npmrc file. Configure the npmrc file first.

办法:

是没有npmrc文件,是隐藏文件,检查有没有,如果没有在电脑的根目录/Users/**/下输入终端命令

touch ~/.npmrc

vim ~/.npmrc

写入如下内容

registry=https://repo.huaweicloud.com/repository/npm/ @ohos:registry=https://repo.harmonyos.com/npm/

作者:罐罐金 链接:www.jianshu.com/p/7283650dc…


问题:"globalThis" is not supported (arkts-no-globalthis)

办法:

由于无法为globalThis添加静态类型,只能通过查找的方式访问globalThis的属性,造成额外的性能开销。另外,无法为globalThis的属性标记类型,无法保证对这些属性操作的安全和高性能。因此ArkTS不支持globalThis。

  1. 建议按照业务逻辑根据import/export语法实现数据在不同模块的传递。
  2. 必要情况下,可以通过构造的单例对象来实现全局对象的功能。(说明: 不能在har中定义单例对象,har在打包时会在不同的hap中打包两份,无法实现单例。)

构造单例对象

// 构造单例对象
export class GlobalContext {
  private constructor() {}
  private static instance: GlobalContext;
  private _objects = new Map<string, Object>();

  public static getContext(): GlobalContext {
    if (!GlobalContext.instance) {
      GlobalContext.instance = new GlobalContext();
    }
    return GlobalContext.instance;
  }

  getObject(value: string): Object | undefined {
    return this._objects.get(value);
  }

  setObject(key: string, objectClass: Object): void {
    this._objects.set(key, objectClass);
  }
}

应用代码

// file1.ts

export class Test {
  value: string = '';
  foo(): void {
    globalThis.value = this.value;
  }
}

// file2.ts

globalThis.value;

建议改法

// file1.ts

import { GlobalContext } from '../GlobalContext'

export class Test {
  value: string = '';
  foo(): void {
    GlobalContext.getContext().setObject('value', this.value);
  }
}

// file2.ts

import { GlobalContext } from '../GlobalContext'

GlobalContext.getContext().getObject('value');

问题:error:上传文件"responseCode":17,"message":"Http protocol error"

办法:

Header头设置方式为 header: {'Content-Type': ''} ,用于覆盖 harmonyOS 默认的Header参数'Content-Type':'application/json'

juejin.cn/post/739114…


问题:windowClass.setWindowPrivacyMode(isPrivacyMode, (err:BusinessError) => {}设置防截屏,报错:{"code":201}

办法:

查文档是没有设置权限:Permission verification failed. The application does not have the permission required to call the API.

module.json5中添加即可。

"module": {
    "requestPermissions": 
    [
      {
        "name": "ohos.permission.PRIVACY_WINDOW",
      }
    ]
}

问题:Navigation自定义路由表跳转到某个Page,为空页面

Screenshot 2024-12-23 at 17.16.45.png

办法:

未设置路由表,须module.json5里加上下面的声明;

"routerMap": "$profile:router_map",

一般Navigation问题,易错处:

  • 跳转的Page内容未有NavDestination()包含,导致无法正常跳转;
  • PageMaps或路由表router_map.json5,都没有声明该Page;
  • Page名字写错;
  • 主页面用Navigation(this.pageInfos),子页面用NavDestination()搞错;
  • 声明了路由表router_map.json5,没有在module.json5声明使用;

# 自动生成动态路由