Как динамически передавать разные URL-адреса в Retrofit2 Android с помощью Dagger

Это FAQ:

//somexpression[$N]

означает «Найти каждый узел, выбранный //somexpression, который является $N -й дочерью его родителя».

Вы хотите:

(//input[@id="search_query"])[2]

Помните: оператор [] имеет более высокий приоритет (приоритет), чем аббревиатура //.

0
задан Devrath 18 January 2019 в 11:10
поделиться

2 ответа

К сожалению, модификация ( текущей версии 2.5.0 ) должна быть инициализирована с помощью baseUrl , который впоследствии не может быть изменен. Однако в определении конечных точек вашего интерфейса вы можете передать аннотированный параметр @Url (см. Предыдущий ответ от Nanda Z) или вы можете создать несколько экземпляров Retrofit (с другим baseUrl, используя аннотацию @Named ). ), который будет предоставлен Dagger. Например:

@Provides
@Named("myCoolRetrofitInstance1")
@Singleton
Retrofit provideRetrofit1(Gson gson, OkHttpClient okHttpClient) {
    Retrofit retrofit = new Retrofit.Builder()
            .addConverterFactory(GsonConverterFactory.create(gson))
            .baseUrl(SOME_URL_1)
            .client(okHttpClient)
            .build();
    return retrofit;
}

@Provides
@Named("myCoolRetrofitInstance2")
@Singleton
Retrofit provideRetrofit2(Gson gson, OkHttpClient okHttpClient) {
    Retrofit retrofit = new Retrofit.Builder()
            .addConverterFactory(GsonConverterFactory.create(gson))
            .baseUrl(SOME_URL_2)
            .client(okHttpClient)
            .build();
    return retrofit;
}

И для инъекций вы должны также использовать правильную аннотацию @Named.

@Inject
@Named("myCoolRetrofitInstance1") // or @Named("myCoolRetrofitInstance2")
lateinit var retforit: Retforit
0
ответ дан jBegera 18 January 2019 в 11:10
поделиться

Если вы имеете в виду, у вас есть другой базовый URL. вы можете сделать что-то вроде этого:

public interface YourAPIInterface {

    @GET
    Call<POJO> doAllItems(@Url String url);

}

@Url для параметра, чтобы позволить динамически указывать полное имя хоста. Тогда вы можете назвать это обычным способом в Refrofit

0
ответ дан Nanda Z 18 January 2019 в 11:10
поделиться
Другие вопросы по тегам:

Похожие вопросы: