Retrofitのダイナミック設定Baseurlは、ローカルに保存されます.

1610 ワード

需要を解決する:baseurlは1つしかなく、baseurlは動的に構成でき、構成後は保存したり更新したりすることができます.
この間、プロジェクトをしていましたが、このようなニーズに遭遇しました.APPがアクセスするサービスのメインアドレスはユーザーが自分で構成することができ、構成後、手動で更新することもできます.需要分析で分かりましたが、メインドメイン名を動的に構成したいのですか.残りのパスは変わりません.ちょうどプロジェクトで私が使っているのはRetrofitです.はい、わかりました.そのbaseurlを動的に構成したいだけです.必ず保存するように設定されています.これは簡単です.SharedPreferenceで保存すればいいです.更新するには、SharedPreferenceの値をリフレッシュします.はい、需要分析が終わり、技術解決の構想もよくなりました.次は本題に入ります.Retrofitの比較的古いバージョンでは、このbaseurlを動的に更新できるインタフェースがありましたが、後で削除されました.よし、公式のがなくなった以上、ネット上に車輪があるかどうか見てみましょう^......^、結局繰り返し車輪を作るのは我慢できません.ここで私は良い車輪RetrofitUrlManagerを見つけて、私のこの需要を完全に満たすことができます.
1.このフレームワークの依存性を追加します.
compile 'me.jessyan:retrofit-url-manager:1.4.0'

2.okhttpの初期化をRetrofitUrlManagerのwithメソッドに変更します.
        this.mOkHttpClient=RetrofitUrlManager.getInstance()
                .with(newOkHttpClient.Builder())//RetrofitUrlManager  
                .readTimeout(5, TimeUnit.SECONDS)
                .connectTimeout(5, TimeUnit.SECONDS)
                .build();
                // SharedPreference baseurl, sp , 。
                mRetrofit = new Retrofit.Builder()
                .baseUrl(MyUtil.MAIN_URL)// url
                .client(mOkHttpClient)
                .addConverterFactory(GsonConverterFactory.create())//Gson 
                .addCallAdapterFactory(RxJavaCallAdapterFactory.create())// Rxjava 
                .build();

 
3.グローバルbaseurlを設定する方法を呼び出します.このグローバルbaseurlを設定すると、retrofit初期化時に構成されたbaseurlが置き換えられます.
RetrofitUrlManager.getInstance().setGlobalDomain(" baseurl");
//TODO: SP 。