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

ZZR老师
发布于 2020-9-30 20:27
浏览
18收藏

1.原始的网络访问,再加上多线程,会使程序臃肿
        网络请求在现代的应用开发中必不可少,我们熟知的网络请求框架还真不少,像HttpClient、OkHttp还有volley等,它们确实方便但鸿蒙还不能使用它们,还好我们有HttpURLConnection。使用其进行网络请求的示例代码,如下图所示(不用仔细研究):

在鸿蒙(HarmonyOS)环境下,优雅的完成Http访问网络【教程】-开源基础软件社区  相信你想说:HttpURLConnection虽略有繁琐,但能用。然而,这并不是我们要处理网络访问的全部。因为网络操作耗时及不稳定性,使得我们必须在子线程中进行上述代码的工作,等到网络请求有响应结果了,我们又需要回到主线程更新UI,这又使得我们的程序又胖了一圈。如果请求,再多一点呢?我们的程序就胖了好几圈...
2.将多线程与网络访问封装,为程序瘦身
  我们希望的网络请求是这样的:1.隐藏网络访问细节;2.优雅处理UI更新。

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

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

     代码解析:此get方法能够在子线程中完成基于http网络访问, 当访问成功或者失败,就会分别回调onResponse或onFailure方法,这两个方法是在主线程中完成回调的,所以可以更新UI。
  我已将这套Http工具类的源代码,开源上传至github,地址如下:https://github.com/zzrv5/ZZRHttp 

3.鸿蒙Http请求操作步骤:
  3.1 添加网络访问权限:
    在config.json文件中的module中添加,网络访问权限,代码如下所示:

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

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

    "deviceConfig": {
        "default": {
            "network": {
                "cleartextTraffic": true
            }
        }
    },

  3.3 添加ZZRHttp依赖

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

    dependencies {
        implementation 'com.zzrv5.zzrhttp:ZZRHttp:1.0.1'
        ...
    }

   3.4 进行网络访问

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

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

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


     
  
   
   

  
  

 

 

已于2020-10-9 14:47:15修改
15
收藏 18
回复
举报
21条回复
按时间正序
/
按时间倒序
鲜橙加冰
鲜橙加冰

ZZR老师国庆也不休息,勤耕不辍。

2
回复
2020-10-1 11:20:25
老克
老克

xian zan wei jing

1
回复
2020-10-1 11:27:44
SummerRic
SummerRic

超实用,赞赞赞。

1
回复
2020-10-1 11:29:33
红叶亦知秋
红叶亦知秋

国庆还在专研的老师真是辛苦了,感谢分享

1
回复
2020-10-1 13:51:17
ZZR老师
ZZR老师 回复了 SummerRic
超实用,赞赞赞。

我把项目上传到中央仓库了,现在集成只需一句话,更方便了:)

回复
2020-10-3 22:01:09
ZZR老师
ZZR老师 回复了 红叶亦知秋
国庆还在专研的老师真是辛苦了,感谢分享

不客气,不辛苦:)

回复
2020-10-3 22:01:41
ZZR老师
ZZR老师 回复了 老克
xian zan wei jing

xiexie ni de zan,zhe shi dui wo zui da de gu li!~

1
回复
2020-10-3 22:03:21
ZZR老师
ZZR老师 回复了 鲜橙加冰
ZZR老师国庆也不休息,勤耕不辍。

一起加油!~~~

回复
2020-10-3 22:08:36
超心累
超心累

参考 stream 的 toMap方法, 两个方法回调是不是可以搞成两个参数, 而不是 new 匿名类(接口)去实现它, java8大法好 

2
回复
2020-10-4 10:53:36
mb5f6c32e193bee
mb5f6c32e193bee

老师这么厉害👍,太好了,太及时了,感谢

2
回复
2020-10-9 10:28:50
三道彩虹
三道彩虹

上传到中央仓库了?

回复
2020-10-10 11:28:00
ZZR老师
ZZR老师 回复了 三道彩虹
上传到中央仓库了?

是的,已经上传了。

回复
2020-10-13 08:26:10
书中自有颜如玉V
书中自有颜如玉V

老师好,我设置访问模式是下面的这句,http还是不能访问,加s就可以了,这是怎么回事?

    "deviceConfig": {
        "default": {
            "network": {
                "cleartextTraffic": true
            }
        }
    },

回复
2021-1-15 17:07:39
书中自有颜如玉V
书中自有颜如玉V

这个是报的异常W System.err: java.io.IOException: Cleartext HTTP traffic to www.anxuanshop.com not permitted

回复
2021-1-15 17:09:22
BLUESKYHOST
BLUESKYHOST

蹭波热度 基于ZZR老师写的http插件,网络图片类

https://harmonyos.51cto.com/posts/3388

已于2021-3-11 10:48:28修改
回复
2021-3-11 10:47:56
软通田可辉
软通田可辉

加油加油👍

回复
2021-3-11 11:09:09
没用的喵叔
没用的喵叔

OkHttp可以直接使用

1
回复
2021-3-12 10:15:54
一路向北545
一路向北545

ZZR老师,有没有文件下载的功能?

回复
2021-3-29 16:47:48
小时候没有喝够奶
小时候没有喝够奶

优秀,正好解决了我这段时间的迷惑

1
回复
2021-6-14 19:43:41
丨张明亮丨
丨张明亮丨

受教了

1
回复
2021-6-21 18:12:08
回复
    相关推荐