鸿蒙OS开发实例:【HarmonyHttpClient】网络框架
1.OpenHarmony南向开发案例:【智能风扇】2.鸿蒙HarmonyOS开发实例:【简单时钟】3.HarmonyOS开发实例:【状态管理】4.鸿蒙OS开发学习:【尺寸适配实现】5.OpenHarmony鸿蒙开发学习:【Ability的启动模式】6.鸿蒙HarmonyOS开发实战:【分布式音乐播放】7.HarmonyOS开发实例:【分布式数据管理】8.鸿蒙HarmonyOS开发实例:【分布式关系型数据库】9.OpenHarmony开发技术:【国际化】实例10.OpenHarmony开发案例:【分布式计算器】11.HarmonyOS开发实例:【数字管家app】12.HarmonyOS开发:【NFC配置流程】13.HarmonyOS开发:【数字管家app设备接入FA】
14.鸿蒙OS开发实例:【HarmonyHttpClient】网络框架
15.鸿蒙OS开发实例:【Native C++】16.HarmonyOS开发实例:【菜单app】17.OpenHarmony开发学习:【源码下载和编译】18.HarmonyOS开发实例:【自定义Emitter】19.鸿蒙OS开发学习:【第三方库调用】20.HarmonyOS开发学习:【DevEco Device Tool 安装配置(问题全解)】21.OpenHarmony开发实例:【鸿蒙.bin文件烧录】22.HarmonyOS开发实例:【app帐号管理】23.OpenHarmony实例应用:【常用组件和容器低代码】24.OpenHarmony南向嵌入式:【XR806开发板指导文档】25.OpenHarmony南向开发案例:【智能门锁】26.HarmonyOS开发实例:【任务延时调度】27.OpenHarmony开发案例:【自定义通知】28.OpenHarmony开发实例:【仿桌面应用】29.HarmonyOS开发实例:【事件的订阅和发布】30.OpenHarmony开发案例:【电影卡片】31.OpenHarmony南向开发案例:【智能体重秤】32.鸿蒙OS开发指导:【应用包签名工具】33.OpenHarmony开发实例:【分布式游戏鉴权应用】34.OpenHarmony开发实例:【新闻客户端】35.鸿蒙OpenHarmony Native API【Native_Bundle】36.HarmonyOS开发实战:【亲子拼图游戏】简介
鸿蒙上使用的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表单进行全局加密,也可以在这里执行
*/
@Override
public void intercept(Request request) {
Log.e("请求拦截器当前线程: " + Thread.currentThread().getName() + " -- " + request.url());
}
});
//执行异步请求
client.newCall(request)
//如果采用上传文件方式,可以在这里开启上传进度监控
.intercept(new InterceptListener() {
@Override
public void onProgress(final int index, final long currentLength, final long totalLength) {
Log.e("当前进度", " -- " + ((float) currentLength / totalLength) * 100);
}
})
.execute(new Callback() {
@Override
public void onResponse(Response response) {
String body = response.getBody();//getBody()和toStream()是互斥的
InputStream is = response.toStream();//如果采用下载,可以在这里监听下载进度
}
@Override
public 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);
}鸿蒙开发next知识库文档+mau123789是v直接拿取!!
执行请求
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() {
@Override
public 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>>() {
@Override
public void onResponse(Response<BaseModel<User>> response) {
//回调是切换在UI线程,可直接更新界面,自动解析body,就是BaseModel<User>,需要判断body为不为null
}
@Override
public void onFailure(Exception e) {
}
});
//当然也支持同步请求,顺序请求N个接口的最佳方法,解决逻辑嵌套,这里只能在子线程执行
Response<BaseModel<User>> response = retrofit.from(LoginService.class)
.login("xxx@qq.com", "123456", 2, 2);
.withHeaders(Headers...)
.execute();
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· DeepSeek 开源周回顾「GitHub 热点速览」
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了