Android 多个域名自动切换

创建一个拦截器
判断当前API使用哪个域名

MoreBaseUrlInterceptor
public class MoreBaseUrlInterceptor implements Interceptor {
    @Override
    public Response intercept(Chain chain) throws IOException {
        //获取原始的originalRequest
        Request originalRequest = chain.request();
        //获取老的url
        HttpUrl oldUrl = originalRequest.url();
        //获取originalRequest的创建者builder
        Request.Builder builder = originalRequest.newBuilder();
        //获取头信息的集合如:
        List<String> urlnameList = originalRequest.headers("urlname");
        if (urlnameList != null && urlnameList.size() > 0) {
            //删除原有配置中的值,就是namesAndValues集合里的值
            builder.removeHeader("urlname");
            //获取头信息中配置的value,如:v2或者v3
            String urlname = urlnameList.get(0);
            HttpUrl baseURL=null;
            //根据头信息中配置的value,来匹配新的base_url地址
            if ("v2".equals(urlname)) {
                baseURL = HttpUrl.parse(API.BASE_v2);
            } else{
                baseURL = HttpUrl.parse(API.BASE_v3);
            }
            //重建新的HttpUrl,需要重新设置的url部分
            HttpUrl newHttpUrl = oldUrl.newBuilder()
                    .scheme(baseURL.scheme())//http协议如:http或者https
                    .host(baseURL.host())//主机地址
                    .port(baseURL.port())//端口
                    .build();
            //获取处理后的新newRequest
            Request newRequest = builder.url(newHttpUrl).build();
            return  chain.proceed(newRequest);
        }else{
            return chain.proceed(originalRequest);
        }
    }
}

API接口

    通过heades的方式(key,value)  给API进行标识
    拦截器类中 会判断value是v2 还是 v3
 

    //首页接口
    @Headers("urlname:v2")
    @GET("index")
    Observable<HomePageBean> homepage(@QueryMap HashMap<String, String> map);

    //升级SVIP
    @Headers("urlname:v3")
    @GET("v3/items")
    Observable<UpgradeSVipBean> upgradesvip(@QueryMap HashMap<String, String> map);

API域名

public class API {

    public final static String BASE_v2 = "http://xxx";
    public final static String BASE_v3 = "http://xxxx";

}

在okhttp网络请求中添加

.addInterceptor(new MoreBaseUrlInterceptor())

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值