当前位置:   article > 正文

ArkTS、网络数据请求获取不到数据的原因_arkts网络请求一直失败

arkts网络请求一直失败

1.在使用ArkTS开发HarmonyOS应用时,需要调用HTTP网络请求 @ohos.net.http 动态获取数据,进行UI列表刷新,这想必是应用开发最常见的功能。但是根据官网网络请求的示例代码进行功能开发时,封装方法进行HTTP请求后,返回获取数据总是为空,无法返回调用接口获取的结果,经过一系列步骤检查,终于获取到数据,在此附上我的开发步骤、一些注意事项以及参考文档。

【开发步骤】

步骤1:根据官方文档,HTTP网络请求需要申请ohos.permission.INTERNET权限,需要在配置文件module.json5中添加权限,如下:

"requestPermissions": [

  {

    "name""ohos.permission.INTERNET",

    "usedScene": {

      "when""always"

    }

  }

]

步骤2:封装HTTP请求方法,由于这里需要请求数据后返回,所以不能直接用callback方式作为异步方法,需要使用Promise方式作为异步方法,配合await和async使用,代码参考如下

  1. import http from '@ohos.net.http';
  2. import Response from './Response';
  3. import hilog from '@ohos.hilog';
  4. export function requestPost(url:string,data?:any):Promise<Response>{
  5. //定义一个后台请求的基地址
  6. const BASE_URL = "http://192.168.17.1:9988";
  7. //创建http
  8. let httpRequest=http.createHttp();
  9. let responseResult= httpRequest.request(BASE_URL+url,{
  10. method:http.RequestMethod.POST,
  11. header:{
  12. 'Content-Type': 'application/json'
  13. },
  14. extraData:JSON.stringify(data)
  15. });
  16. let response = new Response();
  17. responseResult.then((value:http.HttpResponse)=>{
  18. if (value.responseCode===200) {
  19. hilog.info(0xFF00, '登录接口请求返回数据=========', '%{public}s 登录接口请求返回数据', JSON.stringify(value));
  20. let res: Response = JSON.parse(`${value.result}`);
  21. response.data = res.data;
  22. response.code = res.code;
  23. response.message = res.message;
  24. }else{
  25. response.message = '请求错误';
  26. response.code = 400;
  27. hilog.info(0xFF00, '登录接口请求错误=========', '%{public}s 登录接口请求错误', JSON.stringify(value));
  28. }
  29. return response;
  30. }).catch(()=>{
  31. response.message = '请求出错';
  32. response.code = 400;
  33. return response;
  34. });
  35. return;
  36. };
  37. export async function requestGet(url:string,data?:any):Promise<Response>{
  38. //定义一个后台请求的基地址
  39. const BASE_URL = "http://192.168.17.1:9988";
  40. //创建http
  41. let httpRequest=http.createHttp();
  42. let responseResult= httpRequest.request(BASE_URL+url,{
  43. method:http.RequestMethod.GET,
  44. header:{
  45. 'Content-Type': 'application/json'
  46. }
  47. });
  48. let response = new Response();
  49. await responseResult.then((value)=>{
  50. hilog.info(0xFF00, '登录接口请求返回数据=========', '%{public}s 登录接口请求返回数据', JSON.stringify(value));
  51. let res: Response = JSON.parse(`${value.result}`);
  52. response.data = res.data;
  53. response.code = res.code;
  54. response.message = res.message;
  55. },(err)=>{
  56. response.message = '请求错误';
  57. response.code = 400;
  58. hilog.info(0xFF00, '登录接口请求错误=========', '%{public}s 登录接口请求错误', JSON.stringify(err));
  59. return response;
  60. });
  61. hilog.info(0xFF00, '登录接口成功返回的对象response=========', '%{public}s 登录接口成功返回的对象response', JSON.stringify(response));
  62. return response;
  63. }

 步骤3:在ets文件中调用方法获取数据,注意由于封装getHttpData时为async方法,所以调用同样需要使用async方式调用,代码如下所示:

  1. Button($r('app.string.login'))
  2. .fontColor('#FFF')
  3. .fontWeight(FontWeight.Bolder)
  4. .width('50%')
  5. .onClick(async () => {
  6. let response:Response= await requestGet('/login',http.RequestMethod.GET);
  7. hilog.info(0xFF00, '登录接口成功准备跳转页面=========', '%{public}s 登录接口成功准备跳转页面', response);
  8. if (response.code===200) {
  9. router.pushUrl({
  10. url:'pages/HXIndex'
  11. },(err)=>{
  12. hilog.info(0xFF00, '跳转页面出错=========', '%{public}s 跳转页面出错', JSON.stringify(err));
  13. })
  14. }

 

【注意事项】

1、使用ArkTS中网络请求接口时,一定要申请ohos.permission.INTERNET权限;

2、封装方法进行HTTP请求时,注意需要使用Promise方式配合await和async使用,await添加到获取数据处理数据那一步,才能同步返回获取后数据结果;

3、调用HTTP请求方法时,同样需要使用async。

4、我提供的示例中未使用extraData,若需要进行参数请求时,注意不能对extraData整个参数进行加密处理,因为extraData通过string方式传递时,是使用key1=value1&key2=value2方式连接,其中“=”和“&”不能进行加密处理,只能加密处理其中的key或者value值。

 

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/从前慢现在也慢/article/detail/92116
推荐阅读
相关标签
  

闽ICP备14008679号