В настоящее время я работаю с Retrofit2, и мне было интересно, как лучше сделать новый звонок.
В моем текущем приложении есть служба, которая реализует шаблон синглтона:
public final class Services
{
private static volatile Services instance;
public static Services getInstance()
{
if (instance == null)
{
synchronized (Services.class)
{
if (instance == null)
{
instance = new Services();
}
}
}
return instance;
}
private final IServices myServices;
public Services()
{
final Retrofit.Builder retrofitBuilder = new Retrofit.Builder();
retrofitBuilder.client(new OkHttpClient.Builder().build());
myServices = retrofitBuilder.build().create(IServices.class);
}
public void myCall(@NonNull String param)
{
//...
}
}
В метод myCall
я звоню, например: myServices.aGetRequest(param).execute();
Теперь я хотел бы, например, изменить запрос (например, добавить несколько заголовков), но без перехватчика и сделать вызов. Какой самый лучший способ?
Из интерфейса IServices
у меня нет доступа к okhttp3.Call.Factory
для вызова newCall
. Но у меня есть этот доступ из класса Retrofit
с помощью метода callFactory
.
Является ли хорошим способом сохранить ссылку на классы IServices
и Retrofit
на класс Services
, чтобы сделать что-то подобное в методе myCall
?
public void myCall(@NonNull String param)
{
retrofit.callFactory().newCall(myServices.aGetRequest(param).request().newBuilder().addHeader("MY_HEADER_KEY", "MY_HEADER_VALUE").build()).execute();
}