#java #android #retrofit #okhttp
#java #Android #модернизация #okhttp
Вопрос:
В настоящее время я разрабатываю свое первое приложение, и у меня нет большого опыта работы с сетями и разработкой в целом, поэтому я мог бы воспользоваться некоторой помощью. Как указано в вопросе, мне необходимо установить пользовательский пользовательский агент для всех сетевых запросов, но у меня возникли проблемы. Я настроил прерывание OkHttp, но это, похоже, не работает.
Мой код для OkHttp таков:
static class UserAgentInterceptor implements Interceptor{
public String useragent;
public UserAgentInterceptor(String useragent){
this.useragent = useragent;
}
public UserAgentInterceptor() {
this(String.format(Locale.US,
"%s/%s (Android %s; %s; %s %s; %s)",
"MY APP HERE",
"3.9",
Build.VERSION.RELEASE,
Build.MODEL,
Build.BRAND,
Build.DEVICE,
Locale.getDefault().getLanguage()));
}
@NotNull
@Override
public Response intercept(Chain chain) throws IOException {
Request userAgentRequest = chain.request()
.newBuilder()
.header("User-Agent", useragent)
.build();
return chain.proceed(userAgentRequest);
}
}
@Override
protected void onCreate(Bundle savedInstanceState) {
new UserAgentInterceptor();
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
Я не думаю, что у меня есть какие-либо проблемы с внедрением OkHttp в мое приложение (я правильно поместил реализацию в свой файл build.gradle), поэтому проблема должна быть в другом месте.
Я могу ошибаться, но я предполагаю, что это связано с тем, что мое приложение выполняет не http-запросы, а внешний API. Еще раз, позвольте мне сказать, что это всего лишь моя теория о том, почему она не работает. Если это действительно причина, по которой у меня возникает эта ошибка, может ли быть способ обойти это (возможно, модернизация)?
Я ценю любую помощь в решении этой проблемы, а также объяснение того, для чего на самом деле требуется модернизация, поскольку я тоже не слишком уверен в этом. Спасибо.
Ответ №1:
Вам нужно добавить перехватчик к клиенту с помощью addInterceptor
https://square.github.io/okhttp/interceptors/#application-interceptors
OkHttpClient client = new OkHttpClient.Builder()
.addInterceptor(new LoggingInterceptor())
.build();
Request request = new Request.Builder()
.url("http://www.publicobject.com/helloworld.txt")
.header("User-Agent", "OkHttp Example")
.build();
Response response = client.newCall(request).execute();
response.body().close();
Комментарии:
1. Я видел подобный материал ранее, но где я запутался, так это раздел url при создании запроса. Поскольку я вызываю внешний API (Google Admob, я хочу изменить свой пользовательский агент, продолжая получать объявления для тестирования), у меня нет URL-адреса для ввода. Вместо этого я создаю AdRequest() , и этот API вызывает случайные URL-адреса, которые запрашиваются в моей сети.