Kalle是一个HttpClient,它遵循Http标准协议,支持同步请求和异步请求。支持GET、HEAD、OPTIONS、TRACE、POST、PUT、PATCH、DELETE请求方法。

 鸿蒙开源三方组件--HttpClient组件 Kalle 鸿蒙 HarmonyOS 应用 第1张

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

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

https://HarmonyOS.51cto.com

背景

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

特性

  • 支持GET、HEAD、OPTIONS、TRACE、POST、PUT、PATCH、DELETE请求方法
  • 表单的提交,如普通字符串表单、带文件的表单(含多文件、大文件)
  • 自定义RequestBody,如文件、字符串(JSON、XML、普通字符串)
  • 支持SSL,默认不校验证书,开发者可以自定义证书
  • 9种缓存模式,默认使用AES算法为缓存数据加密
  • 自动管理Cookie,遵循Http协议,与浏览器实现相同原理
  • 在任何时候取消请求,如未开始、正在执行时
  • 全局反序列化转换器,直接请求JavaBean
  • 基于拦截器的智能重定向与智能重试
  • 支持开发者添加拦截器,例如Log打印、登录重试、参数签名
  • 网络可用性缓存检查法,连接层可动态替换,如URLConnection、OkHttp或者ApacheHttpClient

组件示例效果

请求列表信息

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

 鸿蒙开源三方组件--HttpClient组件 Kalle 鸿蒙 HarmonyOS 应用 第2张

上传文件

  1. Kalle.post(UrlConfig.UPLOAD_BODY_FILE)
  2. .urlParam("filename",file.getName())
  3. .body(newFileBody(file))
  4. .tag(this)
  5. .perform(newDialogCallback<BodyInfo>(this){
  6. @Override
  7. publicvoidonResponse(SimpleResponse<BodyInfo,String>response){
  8. if(response.isSucceed()){
  9. bodyItems=null;
  10. statusBtn.setText(uploadResultStr);
  11. }else{
  12. newToastDialog(BodyAbilitySlice.this)
  13. .setText("youclicked:"+response.failed())
  14. .setAlignment(LayoutAlignment.CENTER)
  15. .show();
  16. }
  17. }
  18. });

 鸿蒙开源三方组件--HttpClient组件 Kalle 鸿蒙 HarmonyOS 应用 第3张

下载文件

  1. Kalle.Download.get(UrlConfig.DOWNLOAD)
  2. .directory(AppConfig.get().PATH_APP_DOWNLOAD)
  3. .fileName("sou.apk")
  4. .onProgress(newDownload.ProgressBar(){
  5. @Override
  6. publicvoidonProgress(intprogress,longbyteCount,longspeed)throwsNotExistException,WrongTypeException,IOException{
  7. BigDecimalbg=newBigDecimal(speed/BYTE_NUMBER/BYTE_NUMBER);
  8. StringspeedText=bg.setScale(2,BigDecimal.ROUND_HALF_UP).toPlainString();
  9. StringdownloadSpeed=resourceManager.getElement(ResourceTable.String_download_speed).getString();
  10. speedText=String.format(downloadSpeed,speedText);
  11. viewSetProgress(progress,speedText);
  12. }
  13. })
  14. .perform(newDownloadCallback1(this));

 鸿蒙开源三方组件--HttpClient组件 Kalle 鸿蒙 HarmonyOS 应用 第4张

如何使用

配置

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

配置的Api如下:

  1. privatevoidkalle(){
  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(newBroadcastNetwork(this))
  7. .addInterceptor(newLoginInterceptor())
  8. .addInterceptor(newLoggerInterceptor("KalleSample",BuildConfig.DEBUG))
  9. .converter(newJsonConverter(this))
  10. .build());
  11. }

连接

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.Builderurl=Url.newBuilder("http://www.example.com");
  2. UrlRequesturlRequest=UrlRequest.newBuilder(url,RequestMethod.GET)
  3. .param("name",kalle)
  4. .param("password",123)
  5. .build();

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

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

进度

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

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

  1. FileBinaryheader=newFileBinary(newFile("/sdcard/header.jpg"))
  2. .onProgress(newOnProgress<FileBinary>(){
  3. @Override
  4. publicvoidprogress(FileBinaryorigin,intprogress){
  5. //文件1的进度:progress.
  6. }
  7. });
  8. FileBinarybanner=newFileBinary(newFile("/sdcard/banner.jpg"))
  9. .onProgress(newOnProgress<FileBinary>(){
  10. @Override
  11. publicvoidprogress(FileBinaryorigin,intprogress){
  12. //文件2的进度:progress.
  13. }
  14. });
  15. FormBodyformBody=FormBody.newBuilder()
  16. .param("name","kalle")
  17. .param("age",18)
  18. .binary("header",header)
  19. .binary("banner",banner)
  20. .build();
  21. formBody.onProgress(newOnProgress<FormBody>(){
  22. @Override
  23. publicvoidprogress(FormBodyorigin,intprogress){
  24. //整体进度:progress.
  25. }
  26. });
  27. Kalle.post(UrlConfig.UPLOAD_BODY_FILE)
  28. .urlParam("filename","qq.apk")
  29. .body(formBody)
  30. .perform(...);

集成方式

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

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

方式一:

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

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

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

方式二:

  1. Kalle.post(UrlConfig.UPLOAD_BODY_FILE)
  2. .urlParam("filename",file.getName())
  3. .body(newFileBody(file))
  4. .tag(this)
  5. .perform(newDialogCallback<BodyInfo>(this){
  6. @Override
  7. publicvoidonResponse(SimpleResponse<BodyInfo,String>response){
  8. if(response.isSucceed()){
  9. bodyItems=null;
  10. statusBtn.setText(uploadResultStr);
  11. }else{
  12. newToastDialog(BodyAbilitySlice.this)
  13. .setText("youclicked:"+response.failed())
  14. .setAlignment(LayoutAlignment.CENTER)
  15. .show();
  16. }
  17. }
  18. });
0

复制附录1:相关资料

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

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

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

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

https://harmonyos.51cto.com

 鸿蒙开源三方组件--HttpClient组件 Kalle 鸿蒙 HarmonyOS 应用 第5张

转载请说明出处
知优网 » 鸿蒙开源三方组件--HttpClient组件 Kalle

发表评论

您需要后才能发表评论