HarmonyOS 鸿蒙Next http 请求无法解析后台返回的数据

HarmonyOS 鸿蒙Next http 请求无法解析后台返回的数据 这个问题大概率是因为模拟器缓存导致的。因为更改 ets 文件没有让应用更新缓存,所以一直调试的是最初的数据。建议给页面参数随便调整一下,让远程模拟器更新缓存,这样调试的数据才是最新的。

下图所示我之前无法解析 result 数据,但调试模式发现有数据但无法赋值。随后发现更新页面数据后解析正常了。

cke_1836.png


下面是我封装的 HTTP 请求,根据情况你们自行调整。
```javascript
import http from '[@ohos](/user/ohos).net.http';
import { ResponseResult, RequestData } from '../../viewmodel/NewsViewModel';
import { CommonConstant as Const, ContentType } from '../constant/CommonConstant';

export function httpRequest(data: RequestData): Promise<ResponseResult> {
  let httpRequest = http.createHttp();
  let responseResult = httpRequest.request(Const.BASEURL + data.url, {
    method: data.method,
    readTimeout: Const.HTTP_READ_TIMEOUT,
    header: {
      'Content-Type': data.ContentType ? data.ContentType : ContentType.JSON,
      'X-Requested-With': 'XMLHttpRequest',
      "Accept": "application/json",
      'device-type': Const.DEVICE_TYPE,
    },
    connectTimeout: Const.HTTP_READ_TIMEOUT,
    extraData: data.extraData,
    expectDataType: data.expectDataType ? data.expectDataType : http.HttpDataType.OBJECT
  });
  let serverData: ResponseResult = new ResponseResult();
  // Processes the data and returns.
  return responseResult.then((value: http.HttpResponse) => {
    if (value.responseCode === Const.HTTP_CODE_200) {
      // @ts-ignore
      let result:ResponseResult = value.result
      let resultJson: ResponseResult = new ResponseResult()
      if (result.code === Const.HTTP_CODE_200) {
        serverData.data = resultJson.data;
      } else{
        AlertDialog.show({
          message:result.msg
        })
      }
      serverData.code = resultJson.code;
      serverData.msg = resultJson.msg;

    } else {
      serverData.msg = `${$r('app.string.http_error_message')}&${value.responseCode}`;
      AlertDialog.show({
        message:serverData.msg
      })
    }
    return serverData;
  }).catch(() => {
    serverData.msg = $r('app.string.http_error_message');
    AlertDialog.show({
      message:serverData.msg
    })
    return serverData;
  })
}

更多关于HarmonyOS 鸿蒙Next http 请求无法解析后台返回的数据的实战教程也可以访问 https://www.itying.com/category-93-b0.html

1 回复

更多关于HarmonyOS 鸿蒙Next http 请求无法解析后台返回的数据的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


在HarmonyOS(鸿蒙Next)中,如果HTTP请求无法解析后台返回的数据,可能是以下原因导致:

  1. 数据格式不匹配:后台返回的数据格式可能与前端解析的格式不一致。例如,后台返回的是JSON格式,但前端尝试将其解析为XML或其他格式。确保前后端数据格式一致。

  2. 编码问题:数据在传输过程中可能因编码问题导致解析失败。检查HTTP请求头中的Content-TypeAccept字段,确保编码方式(如UTF-8)一致。

  3. 网络请求库问题:鸿蒙Next中使用的网络请求库可能存在解析问题。检查使用的网络请求库(如HttpURLConnectionOkHttp)是否正确配置,并确保其支持解析后台返回的数据格式。

  4. 后台返回数据异常:后台返回的数据可能包含非法字符或格式错误,导致解析失败。通过日志或调试工具检查后台返回的原始数据,确保其符合预期格式。

  5. 权限问题:鸿蒙Next中可能需要特定权限才能进行网络请求和解析数据。检查应用的config.json文件,确保已正确配置网络权限。

  6. 异步处理问题:如果使用异步方式处理HTTP请求,可能在数据返回之前就尝试解析,导致解析失败。确保在数据返回后再进行解析操作。

  7. SDK版本问题:鸿蒙Next的SDK版本可能影响数据解析功能。检查当前使用的SDK版本,确保其支持所需的数据解析功能。

  8. 跨域问题:如果后台服务与前端应用不在同一域名下,可能因跨域问题导致数据无法解析。检查后台服务是否已正确配置跨域支持。

通过以上步骤逐一排查,可以解决鸿蒙Next中HTTP请求无法解析后台返回数据的问题。

回到顶部