鸿蒙(HarmonyOS)环境下,如何优雅地进行Http访问

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

网络请求在现代的应用开发中必不可少,我们熟知的网络请求框架真不少,像HttpCient、HttpCient还有volley等,它们确实方便但鸿蒙还不能使用它们,还好我们有HttpURLConnection。使用其进行网络请求的示例代码,如下图所示(不用仔细研究): 鸿蒙(HarmonyOS)环境下,如何优雅地进行Http访问 相信你想说:HttpURLConnection虽略有繁琐,但能用。然而,这并不是我们要处理网络访问的全部。因为网络操作耗时及不稳定性,使得我们必须在子线程中进行上述代码的工作,等到网络请求有响应结果了,我们又需要回到主线程更新UI,这又使得我们的程序又胖了一圈。如果请求,请求再多一点呢?我们的程序就胖了好几圈…

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.鸿蒙App 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等操作。 } });

关于我

我是ZZR老师,为什么叫ZZR老师,是因为ZZR是我名字的缩写,在B站、51CTO、今日头条。搜索:ZZR老师 ,都可以找到我的教学视频。

极客网企业会员

免责声明:本网站内容主要来自原创、合作伙伴供稿和第三方自媒体作者投稿,凡在本网站出现的信息,均仅供参考。本网站将尽力确保所提供信息的准确性及可靠性,但不保证有关资料的准确性及可靠性,读者在使用前请进一步核实,并对任何自主决定的行为负责。本网站对有关资料所引致的错误、不确或遗漏,概不负任何法律责任。任何单位或个人认为本网站中的网页或链接内容可能涉嫌侵犯其知识产权或存在不实内容时,应及时向本网站提出书面权利通知或不实情况说明,并提供身份证明、权属证明及详细侵权或不实情况证明。本网站在收到上述法律文件后,将会依法尽快联系相关文章源头核实,沟通删除相关内容或断开相关链接。