文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

鸿蒙开源三方组件--HttpClient组件 Kalle

2024-12-03 00:12

关注

想了解更多内容,请访问:

51CTO和华为官方合作共建的鸿蒙技术社区

https://harmonyos.51cto.com

背景

Kalle是一个HttpClient,它遵循Http标准协议,支持同步请求和异步请求。

特性

组件示例效果

请求列表信息

  1. Kalle.get(UrlConfig.GET_LIST) 
  2.                 .param("pageNum", PAGE_NUMBER) 
  3.                 .param("pageSize", PAGE_SIZE) 
  4.                 .tag(this) 
  5.                 .perform(new SimpleCallback(this) { 
  6.                     @Override 
  7.                     public void onResponse(SimpleResponse response) { 
  8.                         if (response.isSucceed()) { 
  9.                             NewsWrapper wrapper = response.succeed(); 
  10.                             mDataList = wrapper.getDataList(); 
  11.                             mPage = wrapper.getPage(); 
  12.                             ListContainer listContainer = (ListContainer) findComponentById(ResourceTable.Id_normal_list_container); 
  13.                             MainItemProvider sampleItemProvider = new MainItemProvider(mDataList, NormalAbilitySlice.this); 
  14.                             listContainer.setItemProvider(sampleItemProvider); 
  15.                         } else { 
  16.                             new ToastDialog(NormalAbilitySlice.this) 
  17.                                     .setText(UrlConfig.GET_LIST + " response failed: " + response.failed()) 
  18.                                     .setAlignment(LayoutAlignment.CENTER) 
  19.                                     .show(); 
  20.                         } 
  21.                     } 
  22.                 }); 

上传文件

  1. Kalle.post(UrlConfig.UPLOAD_BODY_FILE) 
  2.                 .urlParam("filename", file.getName()) 
  3.                 .body(new FileBody(file)) 
  4.                 .tag(this) 
  5.                 .perform(new DialogCallback(this) { 
  6.                     @Override 
  7.                     public void onResponse(SimpleResponse response) { 
  8.                         if (response.isSucceed()) { 
  9.                             bodyItems = null
  10.                             statusBtn.setText(uploadResultStr); 
  11.                         } else { 
  12.                             new ToastDialog(BodyAbilitySlice.this) 
  13.                                     .setText("you clicked:" + response.failed()) 
  14.                                     .setAlignment(LayoutAlignment.CENTER) 
  15.                                     .show(); 
  16.                         } 
  17.                     } 
  18.                 }); 

下载文件

  1. Kalle.Download.get(UrlConfig.DOWNLOAD) 
  2.                     .directory(AppConfig.get().PATH_APP_DOWNLOAD) 
  3.                     .fileName("sou.apk"
  4.                     .onProgress(new Download.ProgressBar() { 
  5.                         @Override 
  6.                         public void onProgress(int progress, long byteCount, long speed) throws NotExistException, WrongTypeException, IOException { 
  7.                             BigDecimal bg = new BigDecimal(speed / BYTE_NUMBER / BYTE_NUMBER); 
  8.                             String speedText = bg.setScale(2, BigDecimal.ROUND_HALF_UP).toPlainString(); 
  9.                             String downloadSpeed = resourceManager.getElement(ResourceTable.String_download_speed).getString(); 
  10.                             speedText = String.format(downloadSpeed, speedText); 
  11.                             viewSetProgress(progress, speedText); 
  12.                         } 
  13.                     }) 
  14.                     .perform(new DownloadCallback1(this)); 

如何使用

配置

如果需要,我们可以做一些个性化的配置,但是所有的配置项都不是必须的。

配置的Api如下:

  1. private void kalle() { 
  2.         Kalle.setConfig(KalleConfig.newBuilder() 
  3.                 .connectFactory(OkHttpConnectFactory.newBuilder().build()) 
  4.                 .cookieStore(DBCookieStore.newBuilder(this).build()) 
  5.                 .cacheStore(DiskCacheStore.newBuilder(AppConfig.get().PATH_APP_CACHE).build()) 
  6.                 .network(new BroadcastNetwork(this)) 
  7.                 .addInterceptor(new LoginInterceptor()) 
  8.                 .addInterceptor(new LoggerInterceptor("KalleSample", BuildConfig.DEBUG)) 
  9.                 .converter(new JsonConverter(this)) 
  10.                 .build()); 

连接

Kalle是一个完全独立的网络库,它不限制任何实现Http协议底层连接库,因此它允许开发者自行决定使用何种底层连接库,比如URLConnection、OkHttp、HttpClient。为了减小编译后Kalle的大小,Kalle默认提供了基于URLConnection的底层连接库(因为URLConnction是Java默认自带的),同时实现了基于OkHttp`的备用的底层连接库,有兴趣的开发者可以自行实现基于其它项目的底层连接库。

Http请求

Http请求从请求方法上可以分为两大类,我们把它们称为Url类请求(UrlRequest)和Body类请求(BodyRequest),因为一类只可以是简单的url,而另一类不仅仅可以是简单的url,也可以使用流来发送自定义RequestBody。

Url类的请求方法:

  1. GET, HEAD, OPTIONS, TRACE 

Body类的请求方法:

  1. POST, PUT, DELETE, PATCH 

对于Url类请求,需要构建UrlRequest,例如下面这段代码构建的UrlRequest,最终的url是http://www.example.com?name=kalle&password=123:

  1. Url.Builder url = Url.newBuilder("http://www.example.com"); 
  2. UrlRequest urlRequest = UrlRequest.newBuilder(url, RequestMethod.GET) 
  3.     .param("name", kalle) 
  4.     .param("password", 123) 
  5.     .build(); 

BodyRequest的用法和UrlRequest基本是完全一致的:

  1. Url.Builder url = Url.newBuilder("http://www.example.com"); 
  2. BodyRequest bodyRequest = BodyRequest.newBuilder(url, RequestMethod.GET) 
  3.     .param("name", kalle) 
  4.     .param("password", 123) 
  5.     .build(); 

进度

进度监听一般用于Body类型的请求,一般用于表单文件上传、PUSH自定义RequestBody等。

基于表单时我们可以监听某个文件的上传进度,也可以监听整个表单的发送进度:

  1. FileBinary header = new FileBinary(new File("/sdcard/header.jpg")) 
  2.     .onProgress(new OnProgress() { 
  3.         @Override 
  4.         public void progress(FileBinary origin, int progress) { 
  5.             // 文件1的进度:progress. 
  6.         } 
  7.     }); 
  8. FileBinary banner = new FileBinary(new File("/sdcard/banner.jpg")) 
  9.     .onProgress(new OnProgress() { 
  10.         @Override 
  11.         public void progress(FileBinary origin, int progress) { 
  12.             // 文件2的进度:progress. 
  13.         } 
  14.     }); 
  15.  
  16. FormBody formBody = FormBody.newBuilder() 
  17.     .param("name""kalle"
  18.     .param("age", 18) 
  19.     .binary("header", header) 
  20.     .binary("banner", banner) 
  21.     .build(); 
  22. formBody.onProgress(new OnProgress() { 
  23.     @Override 
  24.     public void progress(FormBody origin, int progress) { 
  25.         // 整体进度:progress. 
  26.     } 
  27. }); 
  28.  
  29. Kalle.post(UrlConfig.UPLOAD_BODY_FILE) 
  30.     .urlParam("filename""qq.apk"
  31.     .body(formBody) 
  32.     .perform(...); 

集成方式

自行编译工程entity、yoga、yoga_layout、fb生成libyoga.so、libfb.so、libyogacore.so

将其添加到要集成的libs文件夹内,在entity的gradle内添加如下代码。

方式一:

通过library生成har包,添加har包到libs文件夹内。

在entry的gradle内添加如下代码:

  1. implementation fileTree(dir:'libs', include:['*.jar','*.har']) 

方式二:

  1. allprojects{ 
  2.     repositories{ 
  3.         mavenCentral() 
  4.     } 
  5. implementation 'io.github.dzsf:kalle:1.0.0' 
  6. implementation 'io.github.dzsf:okalle:1.0.0' 

复制附录1:相关资料

IDE官方下载地址:https://developer.harmonyos.com/cn/develop/deveco-studio

原组件GitBook地址:https://yanzhenjie.com/Kalle

想了解更多内容,请访问:

51CTO和华为官方合作共建的鸿蒙技术社区

https://harmonyos.51cto.com

 

来源:鸿蒙社区内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯