Widziałem dobrą długą dyskusję na ten temat i twierdzi się, że została naprawiona w wersji 2.3.0. Oto kombinacja UżywamIf-None-Match nie zostanie przekazany na moją prośbę
compile 'com.squareup.retrofit2:retrofit:2.0.0-beta4'
compile 'com.squareup.retrofit2:converter-gson:2.0.0-beta4'
compile 'com.squareup.okhttp3:logging-interceptor:3.0.1'
compile 'com.squareup.okhttp3:okhttp:3.2.0'
logi widzę przed otrzymanej odpowiedzi, mają wytycznych; ale kolejna prośba, którą wykonuję, nie zawiera w nagłówku If-None-Match. Testowałem go, wstawiając If-None-Match jawnie według mojego kodu, buforowanie działało i oczekiwano odpowiedzi. Z pewnością jest coś nie tak z wersją bibliotek, których używam, lub z czymś, co nie jest dobre w moim kodzie.
Tutaj konfiguruję okClient.
HttpLoggingInterceptor httpLoggingInterceptor = new HttpLoggingInterceptor();
httpLoggingInterceptor.setLevel(HttpLoggingInterceptor.Level.HEADERS);
okhttp3.OkHttpClient okClient = new okhttp3.OkHttpClient.Builder()
.addInterceptor(new HeaderInterceptor())
.addInterceptor(httpLoggingInterceptor)
.cache(createCacheForOkHTTP())
.connectTimeout(5, TimeUnit.MINUTES)
.readTimeout(5, TimeUnit.MINUTES)
.build();
retrofit = new Retrofit.Builder()
.baseUrl(AppConfig.API_URL)
.addConverterFactory(GsonConverterFactory.create())
.client(okClient)
.build();
Mój przechwytujący nagłówek zawiera logikę, która jest dość skoncentrowana na samym interfejsie API. Tutaj jest to
private class HeaderInterceptor
implements Interceptor {
private String generateAuthHeader(AuthResponse accessToken) {
if (accessToken == null) {
return "";
}
return String.format("Bearer %s", accessToken.getAccessToken());
}
@Override
public okhttp3.Response intercept(Chain chain)
throws IOException {
Request request = chain.request();
final String authorizationValue = generateAuthHeader(runtime.getPrefAccessToken());
if (!TextUtils.isEmpty(authorizationValue)) {
request = request.newBuilder()
.addHeader(AppConfig.API_KEY_AUTHORIZATION, authorizationValue)
.addHeader(AppConfig.API_KEY_ACCEPT, AppConfig.API_ACCEPT)
.build();
//.addHeader("If-None-Match", "a69385c6d34596e48cdddd3ce475d290")
} else {
request = request.newBuilder()
.addHeader(AppConfig.API_KEY_CONTENT_TYPE, AppConfig.API_CONTENT_TYPE)
.addHeader(AppConfig.API_KEY_ACCEPT, AppConfig.API_ACCEPT)
.build();
}
okhttp3.Response response = chain.proceed(request);
return response;
}
}
A oto metoda, przy pomocy której konfiguruję pamięć podręczną.
private Cache createCacheForOkHTTP() {
Cache cache = null;
cache = new Cache(App.getInstance().getBaseContext().getCacheDir(), 1024 * 1024 * 10);
return cache;
}
Szukam jakiegoś szybkiego i skutecznego reagowania jak już wydały rozsądnego czasu znalezienia rozwiązania, ale bez powodzenia.
Dzięki
Czy byłeś w stanie rozwiązać ten problem @ user3242176? Mam do czynienia z tym samym problemem. – sherlock