鸿蒙开发实践:开发过程中遇到的坑

463 阅读2分钟

前言

在进行鸿蒙开发的过程中遇到过不少的坑,在这里记录一下,希望也能够其他需要进行鸿蒙开发的同事提供一些帮助。

数据类中的方法无法被调用

本人在鸿蒙开发中遇到的第一个坑是数据类中的方法无法被调用,在实际开发中,我们将接口请求进行了一层封装,使用泛型T来标识接口请求的返参类型。并且封装成ApiResponse,使用isSuccess方法来进行初步的请求状态判定。然而我很快发现isSuccess方法根本不起作用,打断点之后发现了TypeError: Cannot read property endsWith of undefined的问题,这里是说我们变量没有定义。

在向官方咨询后我才知道接口返回的变量是json形式的字符串,而不是泛型T的变量实例,所以能够拿到其中的属性值,但是拿不到其中定义的方法。官方也向我们提供了解决方案,那就是引入三方库class-transformer

引入了三方库后,我们使用plainToInstance(cls, result.data)方法即可将json字符串转换成实体类,然后就可以调用类中的方法了。

单例模式拿不到类的对象

单例模式是我们在开发中经常用到的一种开发模式,它能够保证所有对象访问的都是唯一实例,同时节省了系统的性能开销,在鸿蒙开发中我们可以通过如下代码进行单例的创建

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);  
}  
}

这里我遇到了第二个坑。通过上述方法创建单例是没有问题的,但是如果在单例类的构造器中有创建自定义类,一定要给自定义类中的变量增加初始值,否则就会出现拿不到单例实例的问题。

总结

上述两个问题就是我在鸿蒙开发过程中遇到的坑,希望也能够给各位有鸿蒙开发需求的朋友提供一些帮助。