Модернизация: как указать базовый URL-адрес с сегментом?

Я хочу протестировать объект HttpUrl для инициализации baseurl Retrofit:

HttpUrl baseUrl = new HttpUrl.Builder()
                    .scheme("https")
                    .host("api-staging.xxxx.co")
                    .build();

            mRetrofit = new Retrofit.Builder()
                    .baseUrl(baseUrl)
                    .client(httpClient.build())
                    .build();

Но я использую информацию о версии для каждого URL-адреса, например: «https://api-staging.xxxx.co/v1/login"

Поэтому я хочу указать версию в этой конфигурации. Поэтому я пробовал так:

  • .host("api-staging.xxxx.co/v1/") > АВАРИЙНЫЙ СБОЙ

И я не хочу добавлять версию на каждую WS (отображение), так как я могу сделать это правильно, ребята?

Большое спасибо!


person anthony    schedule 02.08.2018    source источник
comment
нужно ли добавлять версию во время выполнения?   -  person Dracarys    schedule 02.08.2018
comment
@Dracarys: нет, не обязательно   -  person anthony    schedule 02.08.2018


Ответы (3)


ты не должен использовать

.host("api-staging.xxxx.co/v1/")

хост просто может быть доменным именем или IP-адресом.

вы можете использовать метод addPathSegment для добавления сегмента или написать так:

new Retrofit.Builder().baseUrl("api-staging.xxxx.co/v1/")

person zkywalker    schedule 02.08.2018
comment
просто используйте .baseUrl(String base) должно быть полезно - person zkywalker; 03.08.2018

Но я использую информацию о версии для каждого URL-адреса, например: «https://api-staging.xxxx.co/v1/login"

Если вы хотите использовать динамический URL-адрес, вы можете создать еще один экземпляр модификации, это хороший способ. Раньше я использовал перехватчик, но это не очень хороший способ, когда постоянно вызывается много API с разными URL-адресами (он вызывает неправильные URL-адреса). Вы можете использовать этот способ:

public static Retrofit getClient(String baseURL) {
        if (retrofit == null) {
            retrofit = new Retrofit.Builder()
                    .baseUrl(baseURL)
                    .addConverterFactory(GsonConverterFactory.create())
                    .build();
        } else {
            if (!retrofit.baseUrl().equals(baseURL)) {
                retrofit = new Retrofit.Builder()
                        .baseUrl(baseURL)
                        .addConverterFactory(GsonConverterFactory.create())
                        .build();
            }
        }
        return retrofit;
    }
person RoShan Shan    schedule 02.08.2018

Я не уверен, что это то, что вы хотите, но я обычно указываю базовый URL-адрес в build.gradle моего модуля:

android {
...
    defaultConfig {
    ...
        buildConfigField("String", "BASE_URL", "\"https://api-staging.xxxx.co/v1/login\"")
    }
}

И тогда я использую это так:

BuildConfig.BASE_URL
person redlabrat    schedule 02.08.2018