自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

鴻蒙開源三方組件--HttpClient組件 Kalle

開源
Kalle是一個HttpClient,它遵循Http標準協(xié)議,支持同步請求和異步請求。支持GET、HEAD、OPTIONS、TRACE、POST、PUT、PATCH、DELETE請求方法。

[[414837]]

想了解更多內(nèi)容,請訪問:

51CTO和華為官方合作共建的鴻蒙技術(shù)社區(qū)

https://harmonyos.51cto.com

背景

Kalle是一個HttpClient,它遵循Http標準協(xié)議,支持同步請求和異步請求。

特性

  • 支持GET、HEAD、OPTIONS、TRACE、POST、PUT、PATCH、DELETE請求方法
  • 表單的提交,如普通字符串表單、帶文件的表單(含多文件、大文件)
  • 自定義RequestBody,如文件、字符串(JSON、XML、普通字符串)
  • 支持SSL,默認不校驗證書,開發(fā)者可以自定義證書
  • 9種緩存模式,默認使用AES算法為緩存數(shù)據(jù)加密
  • 自動管理Cookie,遵循Http協(xié)議,與瀏覽器實現(xiàn)相同原理
  • 在任何時候取消請求,如未開始、正在執(zhí)行時
  • 全局反序列化轉(zhuǎn)換器,直接請求JavaBean
  • 基于攔截器的智能重定向與智能重試
  • 支持開發(fā)者添加攔截器,例如Log打印、登錄重試、參數(shù)簽名
  • 網(wǎng)絡可用性緩存檢查法,連接層可動態(tài)替換,如URLConnection、OkHttp或者ApacheHttpClient

組件示例效果

請求列表信息

  1. Kalle.get(UrlConfig.GET_LIST) 
  2.                 .param("pageNum", PAGE_NUMBER) 
  3.                 .param("pageSize", PAGE_SIZE) 
  4.                 .tag(this) 
  5.                 .perform(new SimpleCallback<NewsWrapper>(this) { 
  6.                     @Override 
  7.                     public void onResponse(SimpleResponse<NewsWrapper, String> 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<BodyInfo>(this) { 
  6.                     @Override 
  7.                     public void onResponse(SimpleResponse<BodyInfo, String> 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是一個完全獨立的網(wǎng)絡庫,它不限制任何實現(xiàn)Http協(xié)議底層連接庫,因此它允許開發(fā)者自行決定使用何種底層連接庫,比如URLConnection、OkHttp、HttpClient。為了減小編譯后Kalle的大小,Kalle默認提供了基于URLConnection的底層連接庫(因為URLConnction是Java默認自帶的),同時實現(xiàn)了基于OkHttp`的備用的底層連接庫,有興趣的開發(fā)者可以自行實現(xiàn)基于其它項目的底層連接庫。

Http請求

Http請求從請求方法上可以分為兩大類,我們把它們稱為Url類請求(UrlRequest)和Body類請求(BodyRequest),因為一類只可以是簡單的url,而另一類不僅僅可以是簡單的url,也可以使用流來發(fā)送自定義RequestBody。

Url類的請求方法:

  1. GET, HEAD, OPTIONS, TRACE 

Body類的請求方法:

  1. POST, PUT, DELETE, PATCH 

對于Url類請求,需要構(gòu)建UrlRequest,例如下面這段代碼構(gòu)建的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(); 

進度

進度監(jiān)聽一般用于Body類型的請求,一般用于表單文件上傳、PUSH自定義RequestBody等。

基于表單時我們可以監(jiān)聽某個文件的上傳進度,也可以監(jiān)聽整個表單的發(fā)送進度:

  1. FileBinary header = new FileBinary(new File("/sdcard/header.jpg")) 
  2.     .onProgress(new OnProgress<FileBinary>() { 
  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<FileBinary>() { 
  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<FormBody>() { 
  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文件夾內(nèi),在entity的gradle內(nèi)添加如下代碼。

方式一:

通過library生成har包,添加har包到libs文件夾內(nèi)。

在entry的gradle內(nèi)添加如下代碼:

  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:相關(guān)資料

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

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

想了解更多內(nèi)容,請訪問:

51CTO和華為官方合作共建的鴻蒙技術(shù)社區(qū)

https://harmonyos.51cto.com

 

責任編輯:jianghua 來源: 鴻蒙社區(qū)
相關(guān)推薦

2021-08-09 10:24:49

鴻蒙HarmonyOS應用

2021-03-10 15:03:40

鴻蒙HarmonyOS應用

2021-04-29 14:32:24

鴻蒙HarmonyOS應用

2021-03-24 09:30:49

鴻蒙HarmonyOS應用

2021-08-03 12:47:58

鴻蒙HarmonyOS應用

2021-04-28 15:07:06

鴻蒙HarmonyOS應用

2021-04-28 09:56:44

鴻蒙HarmonyOS應用

2021-08-04 14:16:41

鴻蒙HarmonyOS應用

2021-08-26 16:07:46

鴻蒙HarmonyOS應用

2021-03-03 09:42:26

鴻蒙HarmonyOS圖片裁剪

2021-04-08 14:57:52

鴻蒙HarmonyOS應用

2021-04-20 15:06:42

鴻蒙HarmonyOS應用

2021-07-06 18:21:31

鴻蒙HarmonyOS應用

2021-08-05 15:06:30

鴻蒙HarmonyOS應用

2021-08-30 17:55:58

鴻蒙HarmonyOS應用

2021-08-03 10:07:41

鴻蒙HarmonyOS應用

2021-03-01 14:00:11

鴻蒙HarmonyOS應用

2021-11-17 15:37:43

鴻蒙HarmonyOS應用

2021-04-15 17:47:38

鴻蒙HarmonyOS應用

2021-07-20 15:20:40

鴻蒙HarmonyOS應用
點贊
收藏

51CTO技術(shù)棧公眾號