鸿蒙OS开发实例:【HarmonyHttpClient】网络框架

news/2025/3/14 1:52:25/

 简介

鸿蒙上使用的Http网络框架,里面包含纯Java实现的HttpNet,类似okhttp使用,支持同步和异步两种请求方式;还有鸿蒙版retrofit,和Android版Retrofit相似的使用,解放双手般优雅使用注解、自动解析json

很遗憾,目前没能直接发布bintray,DevEco Studio上传bintray,gradle安装不通过,所以如果要使用,clone下来,引入module即可

HttpNet基本和进阶使用方式,可以进行合适的封装,简化请求逻辑

鸿蒙开发>鸿蒙开发文档参考:qr23.cn/AKFP8k可以复制地址前往。

构建GET请求:和okhttp类似
RequestParams params = new RequestParams().put("userName","oscer").put("pwd","oschina");Request request = new Request.Builder().encode("UTF-8").method("GET").timeout(13000).url("http://www.oschina.net").build();
构建POST请求:
//请求参数
RequestParams params = new RequestParams().put("userName","oscer").putFile("fileName","file").put("pwd","oschina");
//请求对象
Request request = new Request.Builder().encode("UTF-8").method("POST").params(params).timeout(13000).url("http://www.oschina.net").build();
POST JSON 请求构建:
Request request = new Request.Builder().encode("UTF-8").method("POST").content(new JsonContent("json").timeout(13000).url("http://www.oschina.net").build();
执行请求:
//构建Http客户端,这里可以进行全局static final
HttpNetClient client = new HttpNetClient();
client.setProxy("192.168.1.1",80);//您也可以开启该客户端全局代理
client.addInterceptor(new Interceptor() {/* 拦截器在执行请求前都会走到这一步,如果是同步的,就是当前线程,如果是异步,就是子线程* 因此可以在这里动态添加全局Cookie或其它Header之类的* 进阶使用:如果要求对所有接口Form表单进行全局加密,也可以在这里执行*/@Overridepublic void intercept(Request request) {Log.e("请求拦截器当前线程: " + Thread.currentThread().getName() + "  --  " + request.url());}});
//执行异步请求
client.newCall(request)//如果采用上传文件方式,可以在这里开启上传进度监控.intercept(new InterceptListener() {@Overridepublic void onProgress(final int index, final long currentLength, final long totalLength) {Log.e("当前进度", "  --  " + ((float) currentLength / totalLength) * 100);}}).execute(new Callback() {@Overridepublic void onResponse(Response response) {String body = response.getBody();//getBody()和toStream()是互斥的InputStream is = response.toStream();//如果采用下载,可以在这里监听下载进度}@Overridepublic void onFailure(Exception e) {Log.e("onFailure " + e.getMessage());}});// 也可以在子线程中执行同步请求,如果有几个接口需要进行顺序请求,此方法最佳
try {Response response = client.newCall(request).execute();String body = response.getBody();
}catch (Exception e){e.printStackTrace();
}
Retrofit使用方式,底层网络实现基于前面的 HttpNetClient,基于运行时注解添加请求配置,UI切换使用鸿蒙EventHandler

// 构建请求java接口,采用动态代理+注解实现,服务器返回什么,Call<服务器返回json对应的Java bean>即可
public interface LoginService {//普通POST,方法名添加请求方法注解POST、GET、DELETE、Header等,方法参数添加Form表单注解@Headers({"Cookie:cid=adcdefg;"})//静态Header@POST("api/users/login")Call<BaseModel<User>> login(@Form("email") String email,@Form("pwd") String pwd,@Form("versionNum") int versionNum,@Form("dataFrom") int dataFrom);// 上传文件@POST("action/apiv2/user_edit_portrait")@Headers("Cookie:xxx=hbbb;")//上传文件注解Call<String> postAvatar(@File("portrait") String file);//JSON POST@POST("action/apiv2/user_edit_portrait")@Headers("Cookie:xxx=hbbb;")Call<String> postJson(@Json String file);//如果是Json POST,这么使用即可//PATCH@PATCH("mobile/user/{uid}/online")//动态修改url路径Call<ResultBean<String>> handUp(@Path("uid") long uid);
}

搜狗高速浏览器截图20240326151344.png

执行请求
public static final String API = "http://www.oschina.net/";
public static Retrofit retrofit = new Retrofit();
retrofit.registerApi(API);//注册api//进阶使用,假设服务器返回来的json内容是aes加密的,那么可以添加转化器,拦截响应,aes解密后再返回,此方法一定在子线程执行,直接执行耗时操作
retrofit.setConverterFactory(new ConverterFactory() {@Overridepublic void convert(com.haibin.retrofit.Response response) {response.setBodyString("{json}");//拦截响应数据,修改内容,如aes解密后再返回Log.e("响应转换器当前线程: " + Thread.currentThread().getName());}});//执行异步请求,异步请求可以直接在UI线程执行
retrofit.from(LoginService.class).login("xxx@qq.com", "123456", 2, 2);.withHeaders(Headers...)//动态添加某些Header.execute(new Callback<BaseModel<User>>() {@Overridepublic void onResponse(Response<BaseModel<User>> response) {//回调是切换在UI线程,可直接更新界面,自动解析body,就是BaseModel<User>,需要判断body为不为null}@Overridepublic void onFailure(Exception e) {}});//当然也支持同步请求,顺序请求N个接口的最佳方法,解决逻辑嵌套,这里只能在子线程执行Response<BaseModel<User>> response = retrofit.from(LoginService.class).login("xxx@qq.com", "123456", 2, 2);.withHeaders(Headers...).execute();

鸿蒙开发>鸿蒙开发岗位需要掌握那些核心要领?

目前还有很多小伙伴不知道要学习哪些鸿蒙技术?不知道重点掌握哪些?为了避免学习时频繁踩坑,最终浪费大量时间的。

自己学习时必须要有一份实用的鸿蒙(Harmony NEXT)资料非常有必要。 这里我推荐,根据鸿蒙开发>鸿蒙开发官网梳理与华为内部人员的分享总结出的开发文档。内容包含了:【ArkTS、ArkUI、Stage模型、多端部署、分布式应用开发、音频、视频、WebGL、OpenHarmony多媒体技术、Napi组件、OpenHarmony内核、Harmony南向开发、鸿蒙项目实战】等技术知识点。

废话就不多说了,接下来好好看下这份资料。

如果你是一名Android、Java、前端等等开发人员,想要转入鸿蒙方向发展。可以直接领取这份资料辅助你的学习鸿蒙OpenHarmony知识←前往。下面是鸿蒙开发>鸿蒙开发的学习路线图。

针对鸿蒙成长路线打造的鸿蒙学习文档。鸿蒙(OpenHarmony )学习手册(共计1236页)与鸿蒙(OpenHarmony )开发入门教学视频,帮助大家在技术的道路上更进一步。

其中内容包含:

鸿蒙开发>鸿蒙开发基础》鸿蒙OpenHarmony知识←前往

  1. ArkTS语言
  2. 安装DevEco Studio
  3. 运用你的第一个ArkTS应用
  4. ArkUI声明式UI开发
  5. .……

鸿蒙开发>鸿蒙开发进阶》鸿蒙OpenHarmony知识←前往

  1. Stage模型入门
  2. 网络管理
  3. 数据管理
  4. 电话服务
  5. 分布式应用开发
  6. 通知与窗口管理
  7. 多媒体技术
  8. 安全技能
  9. 任务管理
  10. WebGL
  11. 国际化开发
  12. 应用测试
  13. DFX面向未来设计
  14. 鸿蒙系统移植和裁剪定制
  15. ……

鸿蒙开发>鸿蒙开发实战》鸿蒙OpenHarmony知识←前往

  1. ArkTS实践
  2. UIAbility应用
  3. 网络案例
  4. ……

最后

鸿蒙是完全具备无与伦比的机遇和潜力的;预计到年底将有 5,000 款的应用完成原生鸿蒙开发>鸿蒙开发,这么多的应用需要开发,也就意味着需要有更多的鸿蒙人才。鸿蒙开发>鸿蒙开发工程师也将会迎来爆发式的增长,学习鸿蒙势在必行!


http://www.ppmy.cn/news/1424493.html

相关文章

RabbitMQ和Minio实现头像存储

使用 RabbitMQ 处理用户头像上传任务&#xff0c;同时将用户头像存储在 Minio 中是一个常见的应用场景。该示例将展示如何在 Spring Boot 项目中使用 RabbitMQ 和 Minio 实现此功能。示例包括两个部分&#xff1a;一是将头像上传任务推送到 RabbitMQ 队列中&#xff1b;二是从队…

C语言中的数据结构--双向链表

前言 上一节我们已经学习完了单链表&#xff08;单向不带头不循环链表&#xff09;的所有内容&#xff0c;我们在链表的分类里面知道了&#xff0c;链表分为单向的和双向的&#xff0c;那么本节我们就来进行双向链表&#xff08;带头双向循环链表&#xff09;的学习&#xff0c…

【5】DongshanPI-Seven 应用开发_网络编程TCPUDP

目录 1、网络编程概念2、网络编程的API2.1 网络通信交互示意图2.2 主要API 3、编程测试3.1 TCP 测试3.1.1 server 程序3.1.2 Client 程序3.1.3 测试结果 3.2 UDP 测试3.2.1 udp server3.2.2 udp client3.2.3 测试结果 1、网络编程概念 1.数据传输三要素&#xff1a;源、目的、…

springCloud项目打包 ,maven package或install打包报错

解决思路一&#xff1a; <build><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId><version>2.3.7.RELEASE</version></plugin><plugin>&…

【opencv】示例-videocapture_starter.cpp 从视频文件、图像序列或连接到计算机的摄像头中捕获帧...

/** * file videocapture_starter.cpp * brief 一个使用OpenCV的VideoCapture与捕获设备&#xff0c;视频文件或图像序列的入门示例 * 就像CV_PI一样简单&#xff0c;对吧&#xff1f; * * 创建于: 2010年11月23日 * 作者: Ethan Rublee * * 修改于: 2013年4月17日 * …

Python 选择用类或方法做装饰器的场景

在Python中,我们可以使用方法或者类来实现装饰器。选择使用方法还是类作为装饰器,主要取决于具体的应用场景。 使用方法作为装饰器 当装饰器的功能相对简单,不需要保持任何状态信息时,使用方法作为装饰器是一个不错的选择。这种情况下,装饰器通常只是对被装饰函数进行一些额外…

知了汇智鸿蒙系列讲座进校园,赋能产业数字化升级,助力创新人才培养

随着信创国产化战略的深入推进&#xff0c;以及万物互联时代的加速到来&#xff0c;信息技术产业正迎来前所未有的发展机遇。在这一背景下&#xff0c;成都知了汇智科技有限公司作为产教融合领域的先行者&#xff0c;积极响应国家号召&#xff0c;通过举办鸿蒙系列讲座进校园活…

Java方法(下)

1.1 方法的可变参数&#xff08;一般重要&#xff09; 规则要求 【修饰符】 class 类名{【①修饰符】 ②返回值类型 ③方法名(④数据类型... 参数名){⑤方法体语句;}【①修饰符】 ②返回值类型 ③方法名(④数据类型 参数名1, 数据类型 参数名2, 数据类型... 参数名3){⑤方法…