HarmonyOS鸿蒙Next中实现Form卡片应用内拉起卡片管理加桌面功能时出现异常问题:catch error, code: undefined, message: is not callable 模拟器

HarmonyOS鸿蒙Next中实现Form卡片应用内拉起卡片管理加桌面功能时出现异常问题:catch error, code: undefined, message: is not callable 模拟器 【问题描述】:我在实现华为文档的“应用内拉起卡片管理加桌”,该链接:应用内拉起卡片管理加桌-应用内请求卡片加桌-ArkTS卡片提供方开发指导-ArkTS卡片开发(推荐)-Form Kit(卡片开发服务)-应用框架 - 华为HarmonyOS开发者的代码,运行报错,是因为什么原因

【问题现象】:出现了一个异常问题。 日志如下: catch error, code: undefined, message: is not callable 模拟器

【版本信息】:api18(5.1.0)
【尝试解决方案】:尝试运行该代码发现报错,但是不知道具体什么原因导致。


更多关于HarmonyOS鸿蒙Next中实现Form卡片应用内拉起卡片管理加桌面功能时出现异常问题:catch error, code: undefined, message: is not callable 模拟器的实战教程也可以访问 https://www.itying.com/category-93-b0.html

3 回复

这边使用api20的模拟器,项目为api18是没有报错的,已共包方式创建卡片创建的卡片,这边使用的代码如下:

// entry/src/main/ets/pages/Index.ets
import { formProvider } from '@kit.FormKit';
import { BusinessError } from '@kit.BasicServicesKit';
import { Want } from '@kit.AbilityKit';
import { promptAction } from '@kit.ArkUI';

@Entry
@Component
struct Index {

  build() {
    Row() {
      Column() {
        // 添加拉起卡片管理页面按钮
        Button($r('app.string.app_name'))
          .onClick(() => {
            const want: Want = {
              // 当前应用包名
              bundleName: "com.example.xxx",
              abilityName: 'EntryFormAbility',
              parameters: {
                'ohos.extra.param.key.form_dimension': 2,
                'ohos.extra.param.key.form_name': 'widget',
                'ohos.extra.param.key.module_name': 'entry'
              },
            };
            try {
              // 点击按钮后调用openFormManager方法,拉起卡片管理页面
              formProvider.openFormManager(want);
            } catch (error) {
              promptAction.openToast({message: (error as BusinessError).message});
              console.error(`catch error, code: ${(error as BusinessError).code}, message: ${(error as BusinessError).message})`);
            }
          })
          .margin({ top: 10, bottom: 10 })
      }
      .width('100%')
    }
    .height('100%')
  }
}

卡片代码:

// entry/src/main/ets/widget/WidgetCard.ets
@Entry
@Component
struct WidgetCard {
  title: string = 'title';

  build() {
    Row() {
      Column() {
        Text(this.title)
          .fontSize(14)
          .fontWeight(FontWeight.Medium)
          .fontColor($r('sys.color.font'))
      }
      .height('100%')
    }
  }
}

这边bundleName是否为当前应用的包名?这边是以什么方式创建的ArkTS卡片?这边有新建一个项目试过可以吗?如果新建项目也不行麻烦提供下完整的demo呢。

更多关于HarmonyOS鸿蒙Next中实现Form卡片应用内拉起卡片管理加桌面功能时出现异常问题:catch error, code: undefined, message: is not callable 模拟器的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


该异常通常由FormExtensionAbility未正确定义导致。检查FormExtensionAbility是否在module.json5中注册,确认abilities路径配置正确。确保onAddForm回调函数已实现且未被重命名为其他函数。验证卡片管理相关API调用方式是否符合HarmonyOS Next规范,避免使用不支持的接口。检查模拟器版本是否与开发环境匹配。

该错误通常由以下原因导致:

  1. API版本兼容性问题:HarmonyOS Next API 18可能对部分接口进行了调整,建议检查formManager相关接口在当前版本是否可用。部分方法在模拟器环境中可能存在临时限制。

  2. 权限配置缺失:确保在module.json5中正确声明卡片权限:

"requestPermissions": [
  {
    "name": "ohos.permission.REQUIRE_FORM"
  }
]
  1. 卡片未正确安装:在调用formManager.addFormToHost()前,需确认目标卡片已通过formProvider.setFormNextRefreshTime()完成初始安装流程。

  2. 模拟器环境限制:部分设备管理功能在模拟器中可能存在实现差异,可尝试在真机环境验证核心逻辑。

建议按以下顺序排查:

  • 检查formManager对象是否成功获取(非undefined)
  • 验证卡片ID与宿主ID参数格式是否符合API 18规范
  • 确认调用时机在UI线程上下文执行

可先通过try-catch捕获具体错误堆栈,定位失效的方法调用点。

回到顶部