0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

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

jf_46214456 来源:jf_46214456 作者:jf_46214456 2024-04-12 16:58 次阅读

简介

鸿蒙上使用的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

搜狗高速浏览器截图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() {
            @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

审核编辑 黄宇

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 框架
    +关注

    关注

    0

    文章

    300

    浏览量

    17049
  • 鸿蒙OS
    +关注

    关注

    0

    文章

    151

    浏览量

    4281
收藏 人收藏

    评论

    相关推荐

    初识鸿蒙OS

    1.0版本的设计和开发;2018年,华为公司完成了鸿蒙内核2.0版本的设计和研发;2019年,华为的智慧屏率先搭载鸿蒙操作系统;2020年9月11日,华为正式发布鸿蒙操作系统,并举行
    发表于 09-10 15:28

    鸿蒙OS应用程序开发

    这份学习文档主要是带领大家在鸿蒙OS上学习开发一个应用程序,主要知识点如下:1、U-Boot引导文件烧写方式;2、内核镜像烧写方式;3、镜像运行。
    发表于 09-11 14:39

    鸿蒙OS适用的全场景到底什么意思?

    鸿蒙系统(HarmonyOS),第一款基于微内核的全场景分布式OS,是华为自主研发的操作系统。华为在开发者大会HDC.2019上正式发布了鸿蒙系统,该系统将率先部署在智慧屏、车载终端、
    发表于 09-25 09:25

    鸿蒙os系统是什么意思 鸿蒙os系统有什么作用

    毫秒级。鸿蒙OS实现模块化耦合,对应不同设备可弹性部署,鸿蒙OS有三层架构,第一层是内核,第二层是基础服务,第三层是程序框架,可用于手机、平
    发表于 12-17 11:34

    鸿蒙应用开发的JS UI框架如何实现高德地图的访问?

    鸿蒙应用,现在分为Java UI框架和Ark UI框架,其中JS UI开发框架Ark UI框架
    发表于 04-28 11:44

    鸿蒙 OS 应用开发初体验

    的操作系统平台和开发框架。HarmonyOS 的目标是实现跨设备的无缝协同和高性能。 DevEco Studio 对标 Android Studio,开发鸿蒙
    发表于 11-02 19:38

    鸿蒙OS初心是面向IoT,IoT系统碎片化才是鸿蒙需解决的关键问题

    副总裁杨海松说,“既然我们已经做出了开发者Beta版,这说明我们已经准备好了。” 此次华为主要介绍了鸿蒙OS 2.0会向开发者提供的三个核心能力:分布式的编程
    的头像 发表于 12-16 14:42 2060次阅读

    鸿蒙OS2.0手机开发者Beta版登场

    12 月 16 日,华为宣布正式推出鸿蒙 OS 的手机开发者 Beta 版,并正式面向个人/企业开发者公测鸿蒙 2.0,
    的头像 发表于 12-16 14:39 1919次阅读

    华为发布鸿蒙OS Beta版

    昨天华为发布鸿蒙OS Beta版了?鸿蒙系统一直在按照既有步伐前进,现在华为发布鸿蒙OS Beta版,而且一些生态
    的头像 发表于 12-17 08:41 2591次阅读

    预计到年底会有超过40款搭载鸿蒙OS的设备上市

    鸿蒙OS应用在了智慧屏、手表等产品上,但是对于消费者来说,大家最关心的还是在手机上用到鸿蒙OS。 在此次的开发者活动上,华为的重点并非是向大
    的头像 发表于 12-17 10:08 879次阅读

    华为鸿蒙OS 2.0开发者公测版本大批量向已申请开发者推送

    4 月 27 日,华为鸿蒙 OS 2.0 开发者公测版本大批量向已申请的开发者推送,随后网上出现大量鸿蒙
    的头像 发表于 05-12 09:26 2850次阅读

    鸿蒙OS千呼万唤始出来

    从2019年在华为开发者大会上公布鸿蒙OS开始,围绕着鸿蒙OS的话题始终没有停止过,而华为也坚持不懈地为
    的头像 发表于 06-01 15:56 2338次阅读

    鸿蒙os怎么升级

    6月2日,华为正式发布了鸿蒙armonyOS 2系统,那么鸿蒙os如何升级?现将鸿蒙os升级方式告知如下。
    的头像 发表于 06-08 16:26 2492次阅读

    鸿蒙os和安卓的区别,鸿蒙与安卓比有什么优势

    华为鸿蒙系统已经发布,鸿蒙系统和安卓都是在Linux基础上开发出来的,所以很多小伙伴都想知道鸿蒙os和安卓系统之间的区别是什么?华为
    的头像 发表于 06-17 09:58 1.3w次阅读

    鸿蒙os2.0系统官网

    的全新芯片,更多个性化操作的推出会让用户们更加舒适的使用鸿蒙2.0系统。 鸿蒙2.0系统介绍:DFX 鸿蒙os2.0系统官网下载,为不同的硬件架构和资源提供了基于组件和可定制的DFX
    的头像 发表于 06-21 20:32 9222次阅读
    <b class='flag-5'>鸿蒙</b><b class='flag-5'>os</b>2.0系统官网