HarmonyOS 鸿蒙Next 电影卡片(ArkTS)demo中globalThis.listMovieData一直是空的

HarmonyOS 鸿蒙Next 电影卡片(ArkTS)demo中globalThis.listMovieData一直是空的

电影卡片(ArkTS) (huawei.com)中的demo,如果新增通过http 获取到服务器数据列表并赋值给globalThis.listMovieData后,在CommonUtils这个工具里的

getListData方法为什么还仅仅是获取本地的数据?globalThis.listMovieData一直是空的.

为什么获取不到数据?

23 回复

有没有人帮助解决下,这个不搞好,卡片搞不来啊

更多关于HarmonyOS 鸿蒙Next 电影卡片(ArkTS)demo中globalThis.listMovieData一直是空的的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


会不会是没有在合适的生命周期内调用http请求,比如项目启动后,是先走CommonUtils里的getListData函数,然后再走你写的http请求,然后由于先走CommonUtils里的getListData,全局变量listMovieData有值了,就没有更新到你写的http请求返回的数据。

非常有可能是这个问题,高手,

  • 问题描述:

在已经创建好的原有工程API9的基础上,我有添加创建了卡片。那么这个卡片的EntryFormAbility和EntryAbility这两个谁执行呢。我是在EntryFormAbility调用CommonUtils.getListData();这个工具方法获取服务器端数据,在EntryAbility里跳转http请求的ets来从服务器获取真正的数据,并想子卡片上展示真正的服务器列表数据。这两个EntryAbility和EntryFormAbility谁先执行?

那么用什么来代替globalThis,比较好呢,用来解决卡片获取接口数据的问题

卡片上的数据,还有卡片信息,最好保存到关系型数据库里。

希望HarmonyOS能继续优化系统稳定性,减少崩溃和重启的情况。

Stage模型是否推荐使用globalThis获取Context

适用于:HarmonyOS 3.1 Beta API 9

不推荐,Stage模型使用globalThis去获取Context是错误的使用方式。

在Stage模型中,整个应用进程共用一个js虚拟机实例,其中可以运行多个Ability实例,共用一个global对象。在同一个js虚拟机内的不同的Ability中使用globalThis获取Context,存在被覆盖从而发生错误的风险

Ability框架开发-基于ArkTS开发常见问题-常见问题-HarmonyOS应用开发

是不是这个上面的愿意 ?

原因,
                

或者最终问下,你们给的demo只有读取本地demo的数据,如何再ets文件里读取服务器端的数据并在卡片上展示,你们是如何处理的?

你可以参考Codelabs里服务卡片,如何从关系型数据库获取数据来更新卡片的,

this.getDataList();这个执行http的接口方法在aboutToAppear()方法中执行

![cke_179.png](https://alliance-communityfile-drcn.dbankcdn.com/FileServer/getFile/cmtybbs/635/659/043/0030086000635659043.20230617181313.71871511311129185674718930886879:50001231000000:2800:A1E00350F2E10AE14FCC79BAD4B47FFF6F7E2270B75C4442C1598A2C21B782D4.png)

![cke_460.png](https://alliance-communityfile-drcn.dbankcdn.com/FileServer/getFile/cmtybbs/635/659/043/0030086000635659043.20230617181330.56079912799687706290924175144862:50001231000000:2800:77BB632D4E7B649DE58306612610AB1EF1087B5FFC2FE1DA79C5179716281DEB.png)

UIAbility和FormExtensionAbility不在同一个进程中。

你是在UIAbility中使用http获取的数据?UIAbility和Form中的globalThis不是同一个,建议看下进程模型。

https://docs.openharmony.cn/pages/v4.0/zh-cn/application-dev/application-models/process-model-stage.md/

我是在一个ets文件的aboutToApppear()方法中执行的http请求的,

假如不是同一个globalThis,我该如何才能将ets文件里赋值的globalThis数据,在Form卡片中展示呢

你意思说,你想通过http请求服务器电影数据赋值给globalThis,然后一直显示为空,去拿写死的数据了?

那你要把请求http的代码贴出来看看,看看你是在哪里调用的。

是的,我本来已经从aboutToAppear中执行http请求到了真正的服务器端的数据,并且打印了出来,并且赋值给globalThis。这个globalThis也有值了,但是当我进行上滑图标显示卡片时,显示的还是本地存储的数据,而不是服务器端的数据。或者说如果我想将服务器端真正的数据展示到卡片上,应该在哪里调用执行http请求?

在更新卡片函数方法里请求数据,并返回给卡片。

在HarmonyOS 鸿蒙Next 电影卡片(ArkTS)demo中,如果globalThis.listMovieData一直是空的,这通常意味着数据没有被正确初始化或赋值。可能的原因及解决方向如下:

  1. 数据初始化问题:检查globalThis.listMovieData的初始化位置,确保在组件加载或数据请求前,该变量已被正确初始化。例如,可以在组件的onCreate或类似生命周期方法中初始化一个空数组或对象。

  2. 数据赋值问题:确认数据请求的逻辑是否正确执行,并且请求成功后是否有将数据赋值给globalThis.listMovieData。检查网络请求、数据解析等步骤是否有误。

  3. 异步数据处理:如果数据请求是异步的,确保在数据到达并处理后再进行界面更新。可以使用状态管理或回调机制来处理异步数据。

  4. 作用域问题:确认globalThis.listMovieData在全局作用域中可访问,且没有被其他代码意外修改或覆盖。

  5. 调试和日志:增加日志输出,查看数据请求和处理过程中的关键变量值,帮助定位问题。

如果以上检查均未能解决问题,可能是代码中存在其他未注意到的逻辑错误或配置问题。此时,建议仔细复查代码逻辑,或参考官方文档和示例代码。如果问题依旧没法解决请联系官网客服,官网地址是:https://www.itying.com/category-93-b0.html

回到顶部