RetrofitServiceManager构造函数关键代码
关键代码就是通过自定义的key加载 新的baseurl
private RetrofitServiceManager() {
//OkHttpClient配置
OkHttpClient.Builder builder = RetrofitUrlManager.getInstance().with(new OkHttpClient.Builder());
builder.connectTimeout(DEFAULT_TIME_OUT, TimeUnit.SECONDS);
builder.readTimeout(DEFAULT_READ_TIME_OUT, TimeUnit.SECONDS);
builder.writeTimeout(DEFAULT_WRITE_TIME_OUT, TimeUnit.SECONDS);
builder.cache(new Cache(new File(Environment.getExternalStorageDirectory() + "/VsubWorld"), 1024 * 1024 * 10));
addInterceptor(builder);
mRetrofit = new Retrofit.Builder()
.baseUrl(NetworkCommon.ANDROID_URL)//BASE_URL
.addConverterFactory(ScalarsConverterFactory.create())
.addConverterFactory(GsonConverterFactory.create())
.addCallAdapterFactory(RxJava2CallAdapterFactory.create())
.client(builder.build())
.build();
//关键代码 平常时候用ANDROID_URL
RetrofitUrlManager.getInstance().setGlobalDomain(NetworkCommon.ANDROID_URL);
//关键代码 NetworkCommon.BASIC_DOMAIN_NAME自定义key 通知用BASE_URL
RetrofitUrlManager.getInstance().putDomain(NetworkCommon.BASIC_DOMAIN_NAME, NetworkCommon.BASE_URL);
}
请求接口service 编写
关键代码就是DOMAIN_NAME_HEADER+自定义的key
import static me.jessyan.retrofiturlmanager.RetrofitUrlManager.DOMAIN_NAME_HEADER;
//普通接口
@Headers({ANDROID_URL+NetworkCommon.LOGOBASE,NetworkCommon.IS_NEED_AUTH})
@POST(NetworkCommon.LOGOBASE)
Observable<BaseBean<UserLogoBase64Bean>> getUserLogoBase64En();
//特殊接口 需要改变baseurl 关键代码 DOMAIN_NAME_HEADER需要导包,NetworkCommon.BASIC_DOMAIN_NAME 自定义key值,根据key值加载不同的url
@Headers({DOMAIN_NAME_HEADER+NetworkCommon.BASIC_DOMAIN_NAME,NetworkCommon.IS_NEED_AUTH})
@GET(NetworkCommon.WECHATQRCODE)
Observable<BaseBean<Object>> getWechatQrcode(@Query("id") String id );
NetworkCommon
public class NetworkCommon {
//通用接口
public static final String BASE_URL ="https://api.baiwan.com/";
//Android接口
public static final String ANDROID_URL ="https://android.baiwan.com/";
//标识位 通知用baseurl 不用Androidurl
public static final String BASIC_DOMAIN_NAME ="base";
//获取用户头像base64
public static final String LOGOBASE = "byzz/user/getUserLogoBase64En";
//获取用户二维码base64
public static final String WECHATQRCODE = "wechat/api/wechat_qrcode_param_set";
}
比用拦截的方式简洁太多了