HarmonyOS 鸿蒙Next 卡片数据不更新的问题

HarmonyOS 鸿蒙Next 卡片数据不更新的问题 开发了一个卡片,功能是显示第多少天的内容,有两个日期,点击卡片进行切换

我在配置文件里设置的是定点刷新,每天0点,但是发现,有的时候可以刷新,有的时候要点几下卡片才能刷新,今天干脆是怎么都刷新不了了

求解决

代码如下:

配置文件:

{
  "forms": [
    {
      "name": "card",
      "description": "桌面卡片",
      "src": "./ets/card/pages/CardCard.ets",
      "uiSyntax": "arkts",
      "window": {
        "designWidth": 720,
        "autoDesignWidth": true
      },
      "colorMode": "auto",
      "isDefault": true,
      "updateEnabled": true,
      "scheduledUpdateTime": "00:00",
      "updateDuration": 0,
      "defaultDimension": "2*2",
      "supportDimensions": [
        "2*2"
      ]
    }
  ]
}

然后是EntryFormAbility的

onUpdateForm(formId) {
  // Called to notify the form provider to update a specified form.
  let formData = {
    day1: Day().cha('2020-12-13', Day().get()),
    day2: Day().cha('2023-02-27', Day().get())
  };
  let formInfo = formBindingData.createFormBindingData(formData)
  formProvider.updateForm(formId, formInfo).then((data) => {
    console.info('FormAbility updateForm success.' + JSON.stringify(data));
  }).catch((error) => {
    console.error('FormAbility updateForm failed: ' + JSON.stringify(error));
  })
}

我不知道是不是没有处理这个formid导致的,因为我实际上桌面上就一张卡片,请大佬赐教


更多关于HarmonyOS 鸿蒙Next 卡片数据不更新的问题的实战教程也可以访问 https://www.itying.com/category-93-b0.html

16 回复

更多关于HarmonyOS 鸿蒙Next 卡片数据不更新的问题的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


然后就是。。。他不自动更新,但是点几下卡片。。。诶就更新了,这又是为啥,

可能是你更新时,异步获取数据慢了,你可以后台加上时间打印日志看看,

我这个数据获取没有走网络连接啊,就纯本地js计算两个日期之间差几天,

你应该用关系型数据库,在卡片onCreateForm方法时,把formId数据保存到关系型数据库,然后手工或每5分钟到关系型数据库获取出所有的卡片信息,再封装好数据返回就可以了。

找HarmonyOS工作还需要会Flutter的哦,有需要Flutter教程的可以学学大地老师的教程,很不错,B站免费学的哦:BV1S4411E7LY/?p=17

谢谢大佬,我试试。但是这里我有个问题哦,为什么是每5分钟?他定时刷新,最短的时间不也是30分钟吗?

另外大佬,这里一定要用关系型数据库嘛?其他数据库能实现吗

文档有说在onCreateForm方法里,写代码支持5分钟后刷新,回调到onUpdateForm方法,然后在这个方法里调用数据库获取卡片信息出来更新。

楼主你好,请参考以下卡片定时刷新开发步骤检查下代码实现:

1. 打开config.json,先将MainWidget2对应的标签”updateDuration”修改为0,以关闭定时刷新。对于标签“scheduledUpdateTime”设定的时刻,当到达之后,MainAbility中卡片的回调方法onUpdateForm()就会被自动调用,如下图所示:

![image.png](https://alliance-communityfile-drcn.dbankcdn.com/FileServer/getFile/cmtybbs/498/999/633/2850086000498999633.20230908161100.67103363580689403936981212294298:50001231000000:2800:C57A7B4A888501A2288711F4898E6889436EE6EEA389C12BD9566AD46D794201.png)

2. 在方法体的最后,调用了卡片控制器的方法updateFormData()。打开MainWidget2Impl,在方法updateFormData()中,添加如下代码:

![image.png](https://alliance-communityfile-drcn.dbankcdn.com/FileServer/getFile/cmtybbs/498/999/633/2850086000498999633.20230908161120.01986690048042644060384391515240:50001231000000:2800:3692478DF964009AFB4F21038B33F4DE43DD9808FB6CC5EA3F7591F944934929.png)

3. 然后,将要刷新的数据存放在一个ZSONObject实例中,然后,将其封装在一个FormBindingData的实例bindingData中,最后,调用MainAbility的方法updateForm(),并将bindingData作为第二个实参。打开config.json,将标签“scheduledUpdateTime”的值修改为当前时刻的两分钟之后。 运行工程,将ManWidget2对应的三个卡片都添加到桌面上,当到达设定的定点时刻之后,三个卡片的标题都刷新了。

找HarmonyOS工作还需要会Flutter的哦,有需要Flutter教程的可以学学大地老师的教程,很不错,B站免费学的哦:BV1S4411E7LY/?p=17

好的好的,我试试看,我现在是要点几下卡片。。。他才能刷新,

你好,api9里面,没有updateFormData()这个方法呀……你这个好像是java的写法,

自己顶帖,我把更新时间改成了8点40,然后还是不能自动更新,要点几下才行

在HarmonyOS鸿蒙Next中,卡片数据不更新可能是由于以下几个原因:

  1. 卡片生命周期管理:卡片的生命周期可能未被正确管理。确保在onCreateFormonUpdateForm等生命周期方法中正确更新数据。

  2. 数据源未更新:卡片依赖的数据源可能未发生变化,导致卡片没有触发更新。检查数据源是否按预期更新。

  3. 卡片刷新机制:卡片的刷新机制可能未正确配置。确保在onTriggerFormEventonUpdateForm中调用updateForm方法来强制刷新卡片。

  4. 卡片缓存:系统可能缓存了卡片的数据,导致未能及时更新。可以尝试清除卡片缓存或在代码中禁用缓存。

  5. 事件通知:如果卡片依赖外部事件更新,确保事件被正确触发并通知到卡片。

  6. 权限问题:某些数据更新可能需要特定权限,检查是否已授予相关权限。

  7. 系统资源限制:在资源受限的设备上,系统可能会延迟或限制卡片的更新频率。

  8. 代码逻辑错误:检查卡片相关的代码逻辑,确保没有错误导致数据更新失败。

  9. 系统版本兼容性:某些功能可能在不同系统版本中表现不同,确保代码兼容当前系统版本。

  10. 日志分析:通过查看系统日志,分析卡片更新失败的具体原因。

如果以上方法仍无法解决问题,建议进一步分析日志和代码逻辑,定位具体原因。

回到顶部