RxJava+Retrofit ネットワーク読み込みライブラリの二次カプセル化 - RxHttpUtils

RxJava+Retrofit ネットワーク読み込みライブラリの二次カプセル化 - RxHttpUtils

RxHttpUtils は、ネットワーク ロード アニメーション、アクティビティ破棄の自動キャンセル要求、ネットワーク キャッシュ、パブリック パラメータ、RSA + AES 暗号化などを含む、RxJava+Retrofit ネットワーク ロード ライブラリの二次カプセル化です。 GitHub ウェアハウス
アドレス

導入

グラドル

allprojects {
    
    
    repositories {
    
    
        maven {
    
     url 'https://jitpack.io' }
    }
}

implementation 'com.github.DL-ZhangTeng:RxHttpUtils:1.4.0'
    //库所使用的三方
    implementation 'androidx.lifecycle:lifecycle-common:2.4.0'
    implementation 'androidx.lifecycle:lifecycle-runtime:2.4.0'
    implementation 'io.reactivex.rxjava2:rxjava:2.2.21'
    implementation 'io.reactivex.rxjava2:rxandroid:2.1.1'
    implementation 'com.squareup.retrofit2:retrofit:2.9.0'
    implementation 'com.squareup.retrofit2:converter-gson:2.9.0'
    implementation 'com.squareup.retrofit2:converter-scalars:2.8.1'
    implementation 'com.squareup.retrofit2:adapter-rxjava2:2.9.0'
    implementation 'com.squareup.okhttp3:logging-interceptor:5.0.0-alpha.2'
    //noinspection GradleDynamicVersion
    implementation 'com.github.DL-ZhangTeng.BaseLibrary:utils:1.4.+'

属性

属性名 説明する
setBaseUrl ConfigGl​​obalHttpUtils() グローバル BaseUrl; ConfigSingleInstance() は BaseUrl を個別に設定します
addCallAdapterFactory CallAdapter.Factory を設定します (デフォルト) RxJavaCallAdapterFactory.create()
addConverterFactory Converter.Factory を設定します。デフォルトは GsonConverterFactory.create()
セットDNS カスタムドメイン名解決
セットキャッシュ キャッシュポリシーを有効にする
ヘッダーの追加 グローバル単一リクエストヘッダー情報
setHeaders グローバル リクエスト ヘッダー情報、静的リクエスト ヘッダーの設定: リクエスト ヘッダーの更新時にリセットする必要はなく、Map 要素を削除して追加するだけです。動的リクエスト ヘッダーの設定: ログイン ステータスに応じてリアルタイムで変更する必要があるトークンやその他のリクエスト ヘッダー パラメーターなど、最小サポート API 24
セットサイン グローバル署名検証の場合、appKey はバックエンドと一致するだけで済みます。特定のルールについては、https://blog.csdn.net/duoluo9/article/details/105214983 を参照してください。
setEnAndDecryption グローバル暗号化と復号化 (AES+RSA)。1. 公開鍵要求パス HttpUrl.get(BuildConfig.HOST + “/getPublicKey”); 2. 公開鍵応答結果 {“result”: {“publicKey”: “”}, “message”: “Query success!”, 「ステータス」: 100}
setCookie ローカルに保存されたグローバル永続 Cookie は、毎回ヘッダーに組み込まれます。
setSslSocketFactory グローバルSSL証明書認証。1. 安全ではなく危険なすべての証明書を信頼します、setSslSocketFactory(); 2. 事前に埋め込まれた証明書を使用してサーバー証明書 (自己署名証明書) を検証します、setSslSocketFactory(getAssets().open("your.cer")) ; 3. 、bks 証明書とパスワードを使用してクライアント証明書を管理し (双方向認証)、埋め込み証明書を使用し、サーバー証明書 (自己署名証明書) を確認します。setSslSocketFactory(getAssets().open("your.bks"), " 123456", getAssets().open(“your.cer”))
setReadTimeOut グローバルタイムアウト設定
setWriteTimeOut グローバルタイムアウト設定
setConnectionTimeOut グローバルタイムアウト設定
setLog リクエストログをグローバルに有効にするかどうか

使用

 public class MainApplication extends Application {
    
    
     private static MainApplication mainApplication;
     private final Map<String, Object> headersMap = new HashMap<>();

     public static MainApplication getInstance() {
    
    
         return mainApplication;
     }

    @Override
    public void onCreate() {
    
    
        super.onCreate();
        HttpUtils.init(this);
        HttpUtils.getInstance()
                .ConfigGlobalHttpUtils()
                //全局的BaseUrl
                .setBaseUrl("http://**/")
                //设置CallAdapter.Factory,默认RxJavaCallAdapterFactory.create()
                .addCallAdapterFactory(RxJava2CallAdapterFactory.create())
                //设置Converter.Factory,默认GsonConverterFactory.create()
                .addConverterFactory(GsonConverterFactory.create())
                //设置自定义域名解析
                .setDns(HttpDns.getInstance())
                //开启缓存策略
                .setCache(true)
                //全局的单个请求头信息
                .addHeader("Authorization", "Bearer ")
                //全局的静态请求头信息
                //.setHeaders(headersMap)
                //全局的请求头信息
                //.setHeaders(headersMap, headers -> {
    
    
                //  if (headers == null) {
    
    
                //      headers = new HashMap<>();
                //  }
                //  boolean isLogin = BuildConfig.DEBUG;
                //  if (isLogin) {
    
    
                //      headers.put("Authorization", "Bearer " + "token");
                //  } else {
    
    
                //      headers.remove("Authorization");
                //  }
                //  return headers;
                //})
                //全局的动态请求头信息
                .setHeaders(headers -> {
    
    
                    if (headers == null) {
    
    
                        headers = new HashMap<>();
                    }
                    headers.put("version", BuildConfig.VERSION_CODE);
                    headers.put("os", "android");

                    boolean isLogin = BuildConfig.DEBUG;
                    if (isLogin) {
    
    
                        headers.put("Authorization", "Bearer " + "token");
                    } else {
    
    
                        headers.remove("Authorization");
                    }
                    return headers;
                })
                //全局持久话cookie,保存本地每次都会携带在header中
                .setCookie(false)
                //全局ssl证书认证
                //信任所有证书,不安全有风险
                .setSslSocketFactory()
                //使用预埋证书,校验服务端证书(自签名证书)
                //.setSslSocketFactory(getAssets().open("your.cer"))
                //使用bks证书和密码管理客户端证书(双向认证),使用预埋证书,校验服务端证书(自签名证书)
                //.setSslSocketFactory(getAssets().open("your.bks"), "123456", getAssets().open("your.cer"))
                //全局超时配置
                .setReadTimeOut(10)
                //全局超时配置
                .setWriteTimeOut(10)
                //全局超时配置
                .setConnectionTimeOut(10)
                //全局是否打开请求log日志
                .setLog(true);
    }
}
//使用生命周期监听自动取消请求、加载中动画自动处理(LifecycleObservableTransformer、ProgressDialogObservableTransformer)
 HttpUtils.getInstance()
                .ConfigGlobalHttpUtils()
                .createService(ApiService.class)
                .loginPwd("admin", "admin")
                .compose(new LifecycleObservableTransformer<>(MainActivity.this))
                .compose(new ProgressDialogObservableTransformer<>(mProgressDialog))
                .subscribe(new BaseObserver<BaseResponse<LoginBean>>() {
    
    
                    @Override
                    public void doOnSubscribe(Disposable d) {
    
    

                    }

                    @Override
                    public void doOnError(IException iException) {
    
    

                    }

                    @Override
                    public void doOnNext(BaseResponse<LoginBean> loginBeanBaseResponse) {
    
    

                    }

                    @Override
                    public void doOnCompleted() {
    
    

                    }
                });
                
//使用生命周期监听自动取消请求、加载中动画自动处理(CommonObserver方案)
//        HttpUtils.getInstance()
//                .ConfigSingleInstance()
//                .setBaseUrl("https://**/")
//                .createService(ApiService.class)
//                .loginPwd("admin", "admin")
//                .subscribeOn(Schedulers.io())
//                .doOnSubscribe(disposable -> mProgressDialog.show())
//                .subscribeOn(AndroidSchedulers.mainThread())
//                .observeOn(AndroidSchedulers.mainThread())
//                .subscribe(new CommonObserver<BaseResponse<LoginBean>>(mProgressDialog) {
    
    
//                    @Override
//                    protected void onFailure(IException iException) {
    
    
//
//                    }
//
//                    @Override
//                    protected void onSuccess(BaseResponse<LoginBean> loginBeanBaseResponse) {
    
    
//                        ToastUtilsKt.showShortToast(MainActivity.this, loginBeanBaseResponse.getMsg());
//                    }
//                });

//手动取消网络请求
//        HttpUtils.getInstance().cancelSingleRequest(this);
//        HttpUtils.getInstance().cancelSingleRequest(Disposable);
//        HttpUtils.getInstance().cancelAllRequest();

混乱

-keep public クラス com.zhangteng.**.*{ *; }

歴史的なバージョン

バージョン 更新する 更新時間
v1.4.0 rxJava の使用時に IException をスローしてデバッグを容易にする 2022/8/22 10:46
v1.3.0 追加addConverterFactory&addCallAdapterFactory&addHeader 2022/7/9 13:07
v1.2.2 util ライブラリで IException を使用して循環依存関係を解決し、例外処理をサブクラスに実装して例外のデバッグを容易にします。 2022/7/4 17:50
v1.2.1 動的リクエストヘッダー追加メソッドの追加とドメイン名解決のカスタマイズ 2022/6/25 16:46
v1.2.0 基本ライブラリユーティリティを使用する 2022/1/21 20:14
v1.1.9 ConcurrentModificationException エラー レポート 2022/1/2 21:28
v1.1.8 ダウンロードファイル構成 2021/12/21 23:42
v1.1.7 ファイルのアップロードはカスタムフィールド名をサポートします 2021/10/28 17:06
v1.1.6 リクエストキャンセルスキームの変更: 1. ObservableTransformer スキームが Lifecycle ライフサイクル監視の自動キャンセルリクエストに追加されます; 2. リクエストは、リクエストが完了した後にコレクションから自動的に削除されます; 3. ページが破棄され、対応するすべてのリクエストが表示されます。タグに追加されたものは自動的に削除されます。 2021/10/9 15:38
v1.1.5 1. ライフサイクルのライフサイクル監視を追加してリクエストを自動的にキャンセルする; 2. タグを介してキャンセルリクエストを追加する 2021/9/22 16:43
v1.1.4 1. サービスの作成時に RetrofitServiceProxyHandler を使用する; 2. シングルトンのアップロードとダウンロードのバグ 2021/7/15 15:36
v1.1.3 単一インターフェイス構成とグローバル構成の同期方法と UnitTest のサポート 2021/7/12 17:45
v1.1.2 サービスの lru キャッシュを増やす 2021/5/10 16:25
v1.1.1 暗号化と復号化の失敗ビルド応答のバグ 2020/12/14 18:04
v1.1.0 Androidx に移行する 2020/7/22 13:40
v1.0.3 グローバルインターセプター障害のバグ 2020/6/27 12:22
v1.0.2 権限を追加し、モジュール名を小文字に変更します。 2020/6/11 9:45
v1.0.1 パッケージ構造の調整 2020/6/11 9:36
v1.0.0 初版 2020/6/3 17:13

感謝する

RxHttpUtils が気に入った場合、または RxHttpUtils が役に立ったと感じた場合は、右上隅の「スター」をクリックしてサポートしてください。あなたのサポートが私のモチベーションです。ありがとうございます。

私に連絡して

電子メール: [email protected]/[email protected]

ライセンス

Copyright © [2020] [スイング]

Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the “Software”), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.

おすすめ

転載: blog.csdn.net/duoluo9/article/details/120698648