DUICUO

HarmonyOS オープンソースサードパーティコンポーネント - HttpClient コンポーネント Kalle

[[414837]]

詳細については、以下をご覧ください。

51CTOとHuaweiが共同で構築したHarmonyOSテクノロジーコミュニティ。

https://harmonyos..com

背景

Kalle は、HTTP 標準プロトコルに準拠し、同期リクエストと非同期リクエストの両方をサポートする HttpClient です。

特性

  • GET、HEAD、OPTIONS、TRACE、POST、PUT、PATCH、および DELETE リクエスト メソッドをサポートします。
  • プレーン文字列フォームやファイル付きフォーム(複数のファイルや大きなファイルを含む)などのフォーム送信。
  • ファイルや文字列 (JSON、XML、プレーン文字列) などの RequestBody をカスタマイズします。
  • SSLはサポートされていますが、証明書はデフォルトでは検証されません。開発者は証明書をカスタマイズできます。
  • 9 つのキャッシュ モードが利用可能で、デフォルト設定では AES アルゴリズムを使用してキャッシュ データを暗号化します。
  • 自動 Cookie 管理、HTTP プロトコルに準拠し、ブラウザと同じ原則を実装します。
  • リクエストは、開始前や進行中など、いつでもキャンセルできます。
  • JavaBeans を直接要求するグローバル デシリアライゼーション コンバーター。
  • インターセプターに基づくインテリジェントなリダイレクトとインテリジェントな再試行
  • 開発者は、ログの印刷、ログインの再試行、パラメータの署名など​​のインターセプターを追加できます。
  • ネットワーク可用性キャッシュ方式。URLConnection、OkHttp、ApacheHttpClient などの接続層を動的に置き換えることができます。

コンポーネント例の効果

リクエストリスト情報

  1. Kalle.get(UrlConfig.GET_LIST)
  2. .param( "ページ番号" , PAGE_NUMBER)
  3. .param( "ページサイズ" , PAGE_SIZE)
  4. .tag(これ)
  5. .perform(新しい SimpleCallback<NewsWrapper>(this) {
  6. @オーバーライド
  7. パブリックvoid onResponse(SimpleResponse<NewsWrapper, String> レスポンス) {
  8. if (response.isSucceed()) {
  9. NewsWrapper ラッパー = response.succeed();
  10. mDataList = wrapper.getDataList();
  11. mPage = wrapper.getPage();
  12. ListContainer listContainer = (ListContainer) findComponentById(ResourceTable.Id_normal_list_container);
  13. MainItemProvider の sampleItemProvider = 新しい MainItemProvider(mDataList、NormalAbilitySlice.this);
  14. listContainer.setItemProvider(sampleItemProvider);
  15. }それ以外{
  16. 新しい ToastDialog(NormalAbilitySlice.this)
  17. .setText(UrlConfig.GET_LIST + " 応答に失敗しました: " + response.failed())
  18. .setAlignment(レイアウト配置.CENTER)
  19. 。見せる();
  20. }
  21. }
  22. });

ファイルをアップロード

  1. Kalle.post(UrlConfig.UPLOAD_BODY_FILE)
  2. .urlParam( "ファイル名" , file.getName())
  3. .body(新しいファイルボディ(ファイル))
  4. .tag(これ)
  5. .perform(新しいDialogCallback<BodyInfo>(this) {
  6. @オーバーライド
  7. パブリックvoid onResponse(SimpleResponse<BodyInfo, String> レスポンス) {
  8. if (response.isSucceed()) {
  9. bodyItems = null ;
  10. statusBtn.setText(アップロード結果Str);
  11. }それ以外{
  12. 新しい ToastDialog(BodyAbilitySlice.this)
  13. .setText( "クリックしました:" + response.failed())
  14. .setAlignment(レイアウト配置.CENTER)
  15. 。見せる();
  16. }
  17. }
  18. });

ファイルをダウンロード

  1. Kalle.Download.get(UrlConfig.DOWNLOAD)
  2. .directory(AppConfig.get().PATH_APP_DOWNLOAD)
  3. .fileName( "sou.apk" )
  4. .onProgress(新しいダウンロード.ProgressBar() {
  5. @オーバーライド
  6. public void onProgress( int progress, long byteCount, long speed) は NotExistException、WrongTypeException、IOException をスローします {
  7. BigDecimal bg = 新しい BigDecimal(速度 / BYTE_NUMBER / BYTE_NUMBER);
  8. 文字列 speedText = bg.setScale(2, BigDecimal.ROUND_HALF_UP).toPlainString();
  9. 文字列のダウンロード速度 = resourceManager.getElement(ResourceTable.String_download_speed).getString();
  10. speedText = String.format(ダウンロード速度、speedText);
  11. viewSetProgress(進行状況、スピードテキスト);
  12. }
  13. })
  14. .perform(新しい DownloadCallback1(this));

使い方

構成

必要に応じてカスタマイズされた構成を作成できますが、構成項目は必須ではありません。

設定された API は次のとおりです。

  1. プライベート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(新しいBroadcastNetwork(this))
  7. .addInterceptor(新しいログインインターセプター())
  8. .addInterceptor(新しいLoggerInterceptor( "KalleSample" 、 BuildConfig.DEBUG))
  9. .converter(新しいJsonConverter(this))
  10. 。建てる());
  11. }

接続する

Kalleは完全に独立したネットワークライブラリであり、基盤となるHTTPプロトコル接続ライブラリの使用を制限しません。そのため、開発者はURLConnection、OkHttp、HttpClientなど、どの基盤接続ライブラリを使用するかを選択できます。コンパイル済みのKalleのサイズを縮小するため、KalleはURLConnectionをベースにしたデフォルトの基盤接続ライブラリを提供します(URLConnectionはJavaにデフォルトで含まれているため)。また、OkHttpをベースにした代替の基盤接続ライブラリも実装しています。関心のある開発者は、他のプロジェクトを参考にして独自の基盤接続ライブラリを実装することもできます。

HTTPリクエスト

HTTPリクエストは、リクエスト方法に基づいて、URLリクエストとボディリクエストの2つの主要なカテゴリに分けられます。一方はシンプルなURLのみを使用でき、もう一方はシンプルなURLだけでなく、ストリームを使用してカスタムリクエストボディを送信できます。

URL クラスのリクエスト メソッド:

  1. GET、HEAD、OPTIONS、TRACE

Bodyクラスのリクエストメソッド:

  1. POST、PUT、 DELETE 、PATCH

URLベースのリクエストの場合、URLRequestを構築する必要があります。例えば、以下のコードで構築されたURLRequestは、最終的にhttp://www.example.com?name=kalle&password=123というURLになります。

  1. Url.Builder url = Url.newBuilder( "http://www.example.com" );
  2. UrlRequest urlRequest = UrlRequest.newBuilder(url, RequestMethod.GET)
  3. .param( "name" , kalle)
  4. .param( "パスワード" , 123)
  5. 。建てる();

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( "パスワード" , 123)
  5. 。建てる();

スケジュール

進行状況の監視は通常、フォーム ファイルのアップロードや PUSH カスタム RequestBody などの Body タイプのリクエストに使用されます。

フォームを使用する場合、特定のファイルのアップロードの進行状況を監視したり、フォーム全体の送信の進行状況を監視したりすることができます。

  1. FileBinary ヘッダー = 新しい FileBinary(新しいファイル ( "/sdcard/header.jpg" ))
  2. .onProgress(新しいOnProgress<FileBinary>() {
  3. @オーバーライド
  4. パブリックvoid progress(FileBinary origin, int progress) {
  5. // ファイル 1 の進行状況: progress。
  6. }
  7. });
  8. FileBinary バナー = 新しい FileBinary(新しいファイル ( "/sdcard/banner.jpg" ))
  9. .onProgress(新しいOnProgress<FileBinary>() {
  10. @オーバーライド
  11. パブリックvoid progress(FileBinary origin, int progress) {
  12. // ファイル 2 の進行状況: progress。
  13. }
  14. });
  15.  
  16. フォームボディ formBody = FormBody.newBuilder()
  17. .param( "名前" , "カレ" )
  18. .param( "年齢" , 18)
  19. .binary ( "ヘッダー" , ヘッダー)
  20. .binary ( "バナー" , バナー)
  21. 。建てる();
  22. formBody.onProgress(新しいOnProgress<FormBody>() {
  23. @オーバーライド
  24. パブリックvoid progress(FormBody origin, int progress) {
  25. // 全体的な進捗状況: progress.
  26. }
  27. });
  28.  
  29. Kalle.post(UrlConfig.UPLOAD_BODY_FILE)
  30. .urlParam( "ファイル名" , "qq.apk" )
  31. .body(フォームボディ)
  32. 。実行する(...);

統合方法

プロジェクト自体 (entity、yoga、yoga_layout、fb) をコンパイルして、libyoga.so、libfb.so、libyogacore.so を生成します。

統合する libs フォルダーに追加し、エンティティの gradle ファイルに次のコードを追加します。

方法1:

ライブラリを使用して .har パッケージを生成し、 .har パッケージを libs フォルダーに追加します。

エントリの Gradle ファイルに次のコードを追加します。

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

方法2:

  1. すべてのプロジェクト{
  2. リポジトリ{
  3. mavenCentral()
  4. }
  5. }
  6. 実装'io.github.dzsf:kalle:1.0.0'  
  7. 実装「io.github.dzsf:okalle:1.0.0」  

付録1:関連資料のコピー

公式IDEダウンロードリンク: https://developer.harmonyos.com/cn/develop/deveco-studio

元のコンポーネントの GitBook アドレス: https://yanzhenjie.com/Kalle

詳細については、以下をご覧ください。

51CTOとHuaweiが共同で構築したHarmonyOSテクノロジーコミュニティ。

https://harmonyos..com