Поскольку мне нужно использовать Retrofit 2, и мне нужно зарегистрироваться, что происходит за запросом, поэтому решение добавляет запрос-перехватчик. Я добавил перехватчик, который я беру из okhttp wiki page. Я также добавляю некоторые другие изменения в качестве своих потребностей и устанавливаю их на okhttp-клиент на этапе сборки, но он не работает так, как я ожидал. для моего удивления, когда я устанавливаю свой пользовательский Interceptor для okhttp-клиента, GsonConverter не может разобрать ответ json на java-объекты.Добавить заголовки в перехватчик при переоборудовании 2
Вот код из моего перехватчик
public class LoggingInterceptor implements Interceptor {
private final static String TAG = "RI";
private HashMap<String, String> headersMap = null;
public LoggingInterceptor(HashMap<String, String> headers) {
this.headersMap = headers;
}
@Override
public Response intercept(Chain chain) throws IOException {
Request request = chain.request();
Request.Builder reqBuilder = request.newBuilder();
Log.e(TAG, "Headers on the map -> " + headersMap.size());
for (String header : headersMap.keySet()) {
reqBuilder.addHeader(header, headersMap.get(header));
}
request = reqBuilder.build();
long timeRequest = System.nanoTime();
Log.d(TAG, String.format(Locale.getDefault(), "Sending %s with %s", request.url(), request.headers()));
Response response = chain.proceed(request);
Log.d(TAG, "<<<=========================================>>>");
long timeResponse = System.nanoTime();
Log.d(TAG, String.format(Locale.getDefault(), "Receiving %s in %s%n%s", response.request().url(), ((timeResponse - timeRequest)/1e6d), response.headers()));
Log.d(TAG, "Data: " + response.body().string());
Log.d(TAG, "Code: " + response.code());
return response;
}
}
А вот как я добавить его клиенту Okhttp
private OkHttpClient createHttpClient(){
if(client == null){
String strUserAgent = "tm-vc=" + BuildConfig.VERSION_CODE + "-devid=" + (getDeviceID().isEmpty() ? "0" : getDeviceID());
HashMap<String, String> headers = new HashMap<>();
headers.put(HEADER_ACCEPT, "application/json; charset=utf-8");
headers.put(HEADER_USER_AGENT, strUserAgent);
String cookie = getSessionCookie();
if(cookie != null && !cookie.isEmpty())
headers.put(HEADER_COOKIE, cookie);
OkHttpClient.Builder builder = new OkHttpClient.Builder();
builder.addInterceptor(new LoggingInterceptor(headers));
builder.retryOnConnectionFailure(true);
client = builder.build();
}
return client;
}
Чтобы проверить, что я сказал, что просто нужно прокомментируйте эту строку builder.addInterceptor(new LoggingInterceptor(headers));
, если вы прокомментируете строку, вызывается и выполняется переоснащение onResponse (работает, json получает синтаксический анализ), если не вызывается onFailure.
ТАК, что мне не хватает на реализацию собственной перехватчика?
ЧТО ТАКОЕ СЕБЯ ВОПРОС? Как добавить заголовки в запрос с использованием перехватчиков?
Да, я могу сделать с аннотациями, но значение заголовков будет статическим.
Примечание: Im используя полностью обновить ДООСНАСТКЕ 2.
Почему вы не используете HttpLoggingInterceptor? https://github.com/square/okhttp/tree/master/okhttp-logging-interceptor –
@ robert-banyai Это тоже не удается, а также мне нужно добавить в него заголовки – AlexSanchez
Извините, но вы все равно не понимаете свою проблему, вы может добавить к вашему клиенту более одного перехватчика. Я использую то же самое и прекрасно работаю. –