Retrofit动态更换BaseUrl最后的妥协

Retrofit动态更换BaseUrl最后的妥协

最近接到一个需求,要让我们的app可以在测试环境和正式环境间随意切换(PS:测试环境的域名多种多样)。本来是一件特简单的事情,但是由于开发和维护Retrofit的大佬们觉得动态替换BaseUrl不安全,使得这件事情变得复杂起来。经过搜索资料以及查看源码,整理出来解决方案有如下几种。

1、更新Retrofit对象

本来项目里面是全局保存着一个Retrofit对象,再点击更换按钮的时候基于新的BaseUrl重新构建一个Retrofit对象替换掉原有的对象。但是我们项目里面用了Dagger2,Dagger2单例构建的Retrofit如何替换?额。。。好像引入的新的问题。

2、通过反射改变BaseUrl

查看Retrofit源码可知,其baseUrl为一个final修饰的HttpUrl类型的变量,所以不能也不可能有方法可以直接改掉BaseUrl。这时候我就想着可以通过反射入手去改掉这个值。所以有了如下代码。

Class<Retrofit> retrofitClass = Retrofit.class;
try {
     
    Field baseUrlField = retrofitClass.getDeclaredField("baseUrl");
    baseUrlField.setAccessible(true);
    baseUrlField.set(mRetrofit, newBaseUrl);
} catch (Exception e) {
    e.printStackT
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值