文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

在鸿蒙(HarmonyOS)环境下,优雅的完成Http访问网络【教程】

2024-12-03 17:16

关注

想了解更多内容,请访问:
51CTO和华为官方合作共建的鸿蒙技术社区
https://harmonyos.51cto.com

1 .原始的网络访问,再加上多线程,会使程序臃肿

网络请求在现代的应用开发中必不可少,我们熟知的网络请求框架还真不少,像HttpClient、OkHttp还有volley等,它们确实方便但鸿蒙还不能使用它们,还好我们有HttpURLConnection。使用其进行网络请求的示例代码,如下图所示(不用仔细研究):

相信你想说:HttpURLConnection虽略有繁琐,但能用。然而,这并不是我们要处理网络访问的全部。因为网络操作耗时及不稳定性,使得我们必须在子线程中进行上述代码的工作,等到网络请求有响应结果了,我们又需要回到主线程更新UI,这又使得我们的程序又胖了一圈。如果请求,再多一点呢?我们的程序就胖了好几圈...

2.将多线程与网络访问封装,为程序瘦身

我们希望的网络请求是这样的:1.隐藏网络访问细节;2.优雅处理UI更新。

基于以上两点,我封装了一套Http请求的工具类,最终的网络访问会变成——这样:

  1. ZZRHttp.get(url, new ZZRCallBack.CallBackString() { 
  2.           @Override 
  3.           public void onFailure(int code, String errorMessage) { 
  4.               //http访问出错,此部分在主线程中工作,可以更新UI等操做。 
  5.           } 
  6.           @Override 
  7.           public void onResponse(String response) { 
  8.               //http访问成功,此部分在主线程中工作,可以更新UI等操作。 
  9.           } 
  10.   }); 

代码解析:此get方法能够在子线程中完成基于http网络访问, 当访问成功或者失败,就会分别回调onResponse或onFailure方法,这两个方法是在主线程中完成回调的,所以可以更新UI。

我已将这套Http工具类的源代码,开源上传至github,地址如下:https://github.com/zzrv5/ZZRHttp

3.鸿蒙Http请求操作步骤:

3.1 添加网络访问权限:

在config.json文件中的module中添加,网络访问权限,代码如下所示:

  1. "module": { 
  2.       "reqPermissions": [{"name":"ohos.permission.INTERNET"}], 
  3.       ... 

 3.2 设置访问模式

鸿蒙的默认是https访问模式,如果您的请求网址是http开头的,请在config.json文件中的deviceConfig下,添加如下设置:

  1. "deviceConfig": { 
  2.      "default": { 
  3.          "network": { 
  4.              "cleartextTraffic"true 
  5.          } 
  6.      } 
  7.  }, 

 3.3 添加ZZRHttp依赖

在build.gradle文件的dependencies中,添加如下配置,引入ZZRhttp: 

  1. dependencies { 
  2.        implementation 'com.zzrv5.zzrhttp:ZZRHttp:1.0.1' 
  3.        ... 
  4.    } 

 3.4 进行网络访问

就是这么简单,代码如下:

  1. ZZRHttp.get(url, new ZZRCallBack.CallBackString() { 
  2.            @Override 
  3.            public void onFailure(int code, String errorMessage) { 
  4.                //http访问出错,此部分在主线程中工作,可以更新UI等操做。 
  5.            } 
  6.            @Override 
  7.            public void onResponse(String response) { 
  8.                //http访问成功,此部分在主线程中工作,可以更新UI等操作。 
  9.            } 
  10.    }); 

 4.关于我

我是ZZR老师,为什么叫ZZR老师,是因为ZZR是我名字的缩写,同学们可以在: https://edu.51cto.com/course/25200.html ,看到我的鸿蒙视频课程。

想了解更多内容,请访问:
51CTO和华为官方合作共建的鸿蒙技术社区
https://harmonyos.51cto.com

 

来源:鸿蒙社区内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯