HarmonyOS 鸿蒙Next:http请求后返回的对象是object类型,不能调用类的方法
HarmonyOS 鸿蒙Next:http请求后返回的对象是object类型,不能调用类的方法
例如我有一个BaseProtocol类,代码如下:
export class BaseProtocol{
public errorReason="";
public errorCode=0;
public errorUrl=""
public nowAt = 0;//服务器时间戳
public sid = "";//标示 就是一个token
public isSuccess(){
return this.errorCode==0;
}
}
htt请求代码,直接把结果转成对象T,T是泛型定义的类型:
return httpInstance
.request(fullUrl, options)
.then((res: http.HttpResponse) => {
logger.info(fullUrl+" success",JSON.stringify(res.result));
return res.result as T;
})
.catch((err: BusinessError) => {
logger.info("出现异常")
logger.error(fullUrl, err.code?.toString(), err.message);
promptAction.showToast({ message: err.message || '网络错误' });
return Promise.reject(err);
})
.finally(() => {
httpInstance.destroy();
});
调用的代码:
act(): Promise<BaseProtocol> {
return httpCall.post<BaseProtocol>(API.DEVICES_ACTIVE)
.then((obj: BaseProtocol) => {
try {
logger.info("obj:"+obj+" isSuccess:"+obj.isSuccess())
if (obj && obj.errorCode == 0) {//激活成功
logger.info("111 obj:" + JSON.stringify(obj));
this.actSuccess(obj);
}
} catch (err) {
logger.error("Error in act:"+err)
}
return obj; // 将对象传递给调用者
});
}
当我拿到obj对象时,调用obj.errorCode这些属性是正常的,但是调用obj.isSuccess()就报错:TypeError: is not callable
说明一下,expectDataType属性设置的是:http.HttpDataType.OBJECT
不知道这个问题大佬们有啥好办法吗?
更多关于HarmonyOS 鸿蒙Next:http请求后返回的对象是object类型,不能调用类的方法的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html
我也发现这个问题了,可以使用第三方class-transformer中的plainToClass(注意第二个参数是json对象)来拷贝数据,这样就不丢失方法了。
发现问题参考:https://developer.huawei.com/consumer/cn/forum/topic/0204149169544358375?fid=0109140870620153026
解决方案参考:https://developer.huawei.com/consumer/cn/blog/topic/03155225705890022
更多关于HarmonyOS 鸿蒙Next:http请求后返回的对象是object类型,不能调用类的方法的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html
好的 谢谢,
您这个跟2楼的回答是一样的,都建议使用class-transformer框架,但是class-transformer框架貌似已经删除了,
在HarmonyOS鸿蒙系统中,当你遇到HTTP请求后返回的对象是object
类型,且无法直接调用类方法的问题时,这通常意味着返回的对象没有被正确地解析或转换为你期望的类型。
在鸿蒙开发中,处理HTTP响应时,你需要先确保响应的内容被正确解析。例如,如果你期望的是一个JSON对象,你应该使用相应的JSON解析库将响应字符串转换为JSON对象。这个对象在鸿蒙中通常是以Map
或者自定义的JavaBean形式存在,而不是简单的object
类型。
如果你已经使用了JSON解析,但仍然得到的是object
类型,那么可能的原因包括:
- 解析库的使用不正确,没有按照预期将JSON字符串转换为具体类型。
- 返回的JSON格式与你的解析代码不匹配,导致解析失败或返回了默认类型。
检查你的代码,确保:
- 你使用了正确的解析库和方法。
- 返回的JSON格式与你的解析代码完全匹配。
- 在调用方法前,确认对象类型已经正确转换。
如果问题依旧没法解决请联系官网客服,官网地址是:https://www.itying.com/category-93-b0.html,