HarmonyOS 鸿蒙Next:http请求后返回的对象是object类型,不能调用类的方法

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

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

5 回复

我也发现这个问题了,可以使用第三方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


好的 谢谢,

【HarmonyOS NEXT】ArkTS 中Json 转Class

https://juejin.cn/post/7358259851611652134

您这个跟2楼的回答是一样的,都建议使用class-transformer框架,但是class-transformer框架貌似已经删除了,

在HarmonyOS鸿蒙系统中,当你遇到HTTP请求后返回的对象是object类型,且无法直接调用类方法的问题时,这通常意味着返回的对象没有被正确地解析或转换为你期望的类型。

在鸿蒙开发中,处理HTTP响应时,你需要先确保响应的内容被正确解析。例如,如果你期望的是一个JSON对象,你应该使用相应的JSON解析库将响应字符串转换为JSON对象。这个对象在鸿蒙中通常是以Map或者自定义的JavaBean形式存在,而不是简单的object类型。

如果你已经使用了JSON解析,但仍然得到的是object类型,那么可能的原因包括:

  1. 解析库的使用不正确,没有按照预期将JSON字符串转换为具体类型。
  2. 返回的JSON格式与你的解析代码不匹配,导致解析失败或返回了默认类型。

检查你的代码,确保:

  • 你使用了正确的解析库和方法。
  • 返回的JSON格式与你的解析代码完全匹配。
  • 在调用方法前,确认对象类型已经正确转换。

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

回到顶部