Skip to content

配置BaseUrl

liujingxing edited this page Feb 25, 2023 · 3 revisions

1、默认域名

通过@DefaultDomain注解配置默认域名,如下:

public class Url {
    @DefaultDomain //设置为默认域名
    public static String baseUrl = "https://www.wanandroid.com/";
}

2、动态域名

我们只需要对BaseUrl重新赋值,此时发请求便会立即生效,如下:

//更改前 url = "https://www.wanandroid.com/service/..."
RxHttp.get("/service/...")
    .toObservableString()  
    .subscribe();
    
Url.baseUrl = "https://www.qq.com"; //动态更改默认域名,改完立即生效,非默认域名同理
//更改后 url = "https://www.qq.com/service/..."
RxHttp.get("/service/...")
    .toObservableString()  
    .subscribe();

3、多域名

对于多域名的情况,RxHttp提供了@DefaultDomain()@Domain()这两个注解来标明默认域名和非默认域名,如下:

public class Url {
    @DefaultDomain() //设置为默认域名
    public static String baseUrl = "https://www.wanandroid.com/"
    
    @Domain(name = "BaseUrlBaidu") //非默认域名,并取别名为BaseUrlBaidu
    public static String baidu = "https://www.baidu.com/";
    
    @Domain(name = "BaseUrlGoogle") //非默认域名,并取别名为BaseUrlGoogle
    public static String google = "https://www.google.com/";
}

注:@DefaultDomain()注解只能使用一次

通过@Domain()注解标注非默认域名,就会在RxHttp类中生成setDomainToXxxIfAbsent()方法,其中Xxx就是注解中取的别名。

上面我们使用了两个@Domain()注解,此时(需要Rebuild一下项目)就会在RxHttp类中生成setDomainToBaseUrlBaiduIfAbsent()setDomainToBaseUrlGoogleIfAbsent()这两方法,此时发请求,我们就可以使用指定的域名,如下:

//使用默认域名,则无需添加任何额外代码
//此时 url = "https://www.wanandroid.com/service/..." 
RxHttp.get("/service/...")
    .toObservableString()  
    .subscribe();
    
//手动输入域名,此时 url = "https://www.mi.com/service/..."
RxHttp.get("https://www.mi.com/service/...")
    .toObservableString()  
    .subscribe();

//手动输入域名时,若再次指定域名,则无效
//此时 url = "https://www.mi.com/service/..."
RxHttp.get("https://www.mi.com/service/...")
    .setDomainToBaseUrlBaiduIfAbsent()  //此时指定Baidu域名无效
    .toObservableString()  
    .subscribe();
    
//使用谷歌域名,此时 url = "https://www.google.com/service/..."       
RxHttp.get("/service/...")
    .setDomainToBaseUrlGoogleIfAbsent() //指定使用Google域名
    .toObservableString()  
    .subscribe();

通过以上案例,可以知道,RxHttp共有3种指定域名的方式,按优先级排名分别是:手动输入域名 > 指定非默认域名 > 使用默认域名。