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