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

发布于:2024-04-19 ⋅ 阅读:(38) ⋅ 点赞:(0)

 简介

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

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

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

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

自己学习时必须要有一份实用的鸿蒙(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 款的应用完成原生鸿蒙开发,这么多的应用需要开发,也就意味着需要有更多的鸿蒙人才。鸿蒙开发工程师也将会迎来爆发式的增长,学习鸿蒙势在必行!