HarmonyOS 鸿蒙Next:如何将一个对象数组声明为全局变量,其他页面都可以使用?

发布于 1周前 作者 wuwangju 来自 鸿蒙OS

HarmonyOS 鸿蒙Next:如何将一个对象数组声明为全局变量,其他页面都可以使用?

上面是官网的音乐的例子,官网是吧音乐放前端了我现在想要把音乐放后端,但是我现在在这个页面写请求好像不行,然后我就想在app主页写请求,让还没进入音乐页面就拿到数据,其他页面可以使用,这样写合理吗,不合理我该如何写?我该如何声明全局变量?

这是后端返回的数据

其实我还尝试了这个方法:在每个单独的页面写了请求,已经获得了数据,songList里面有数据了已经,但是控制台报错:

![cke_53738.png](https://alliance-communityfile-drcn.dbankcdn.com/FileServer/getFile/cmtybbs/596/060/282/0030086000596060282.20240712095253.50457099612388127694303326681076:50001231000000:2800:A176E05F7667EA098CC7758D54C537E821BD49B54A1256A1A9132C6282D9BDA3.png)

![cke_57769.png](https://alliance-communityfile-drcn.dbankcdn.com/FileServer/getFile/cmtybbs/596/060/282/0030086000596060282.20240712095417.39851123398696792838575469908088:50001231000000:2800:0B78A7C2B2008B4FB0B70E70A5900734BA21B117B4C34436D807D958B696F0B5.png)
这是songItem数据类型,这到底是为什么报错,明明已经有数据了?

我是一个开发小白,上面两个问题有大佬帮我看看吗?感激不尽。

更多关于HarmonyOS 鸿蒙Next:如何将一个对象数组声明为全局变量,其他页面都可以使用?的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html

4 回复

看你的代码不是Next版本的,你可以直接用 globalThis.xxxx = xxx,取数据的时候做一下类型转换就行了

NEXT的全局变量那个你可以自己写一个专用的类,使用通用或者定制的字段都可以,比如:

export class GlobalHelper
{
    private static instance: GlobalHelper;
    private SongList: Array<SongItem> = new Array
    private constructor() { }

    public static getHelper()
    {
        if(!GlobalHelper.instance) GlobalHelper.instance = new GlobalHelper();
        return GlobalHelper.instance;
    }
    
    public setSongList(data: Array<SongItem>) { this.SongList = data; }
    public getSongList() { return this.SongList; }
}

获取列表以后,就用 globalHelper.getHelper().setSongList(xxx); 就行了

使用也一样, let xxx = globalHelper.getHelper().getSongList();

当然可以不用get/set方法这种,直接使用字段,看你的编程习惯

想做成通用的话,就改成 Map<string, object>的形式。

更多关于HarmonyOS 鸿蒙Next:如何将一个对象数组声明为全局变量,其他页面都可以使用?的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


好的非常感谢可以获取音乐数据了,

我这也是想把一些公共的数据放在一个单独文件的类里面,我这边是一些消息,所以回调函数会经常去修改这些公共参数,比如好友列表变更这类对象数组的变更操作,我一个文件中的类中的对象数组发生变化我怎么去通知UI去发生变化呢

在HarmonyOS(鸿蒙)开发中,若要将一个对象数组声明为全局变量并在其他页面中使用,可以通过以下几种方式实现:

  1. 使用全局单例模式: 创建一个单例类,在该类中声明并初始化对象数组。通过单例类的实例,可以在应用的任何地方访问该数组。

  2. 利用数据存储机制: 使用鸿蒙提供的数据存储API(如Preferences、文件存储等)将对象数组序列化后存储,需要时反序列化读取。这种方式适用于数据需要在应用重启后仍保留的场景。

  3. 通过服务传递: 如果对象数组需要在不同页面间实时共享,可以考虑通过服务(Service)来管理该数组。页面可以通过绑定服务来获取数组数据。

  4. 全局上下文(Context)扩展: 虽然不推荐直接修改系统Context,但可以通过扩展Application类,在其中声明对象数组,并通过自定义的Context访问该数组。不过,请注意内存管理和生命周期问题。

具体实现时,需根据应用的实际需求和架构设计选择合适的方法。若选择单例或服务方式,请确保线程安全和内存管理。

如果问题依旧没法解决请联系官网客服, 官网地址是 https://www.itying.com/category-93-b0.html

回到顶部