Retrofit之动态设置Baseurl,并保存在本地。

解决需求:只有一个baseurl,且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里面。

你可能感兴趣的:(安卓)