Как я могу пропустить okhttp кеш и получить ответ и кешировать новый ответ - PullRequest
0 голосов
/ 16 мая 2018

Я использую Retrofit с кэшем okHTTP для своих сетевых вызовов. Когда я получил ответ, я написал перехватчик, чтобы найти значение тела timeToCache и переписать заголовок кэша.Сейчас я сталкиваюсь с проблемой, когда я обновляю enitity и вызываю метод get, он всегда возвращает мне ответ кеша.чтобы избежать этого, я добавил следующий заголовок к запросу

@GET("ws/something")
Something getSomething(@Header("Cache-Control") String cacheControl);
and then when calling you either supply null for a (maybe-)cached version or "no-cache" for a live version:

myApi.getSomething(forceRefresh ? "no-cache" : null);

, теперь я получаю новый ответ, но этот ответ не получает кэш?Как я могу сохранить этот ответ в кэш сейчас?

1 Ответ

0 голосов
/ 03 июля 2018

Я не смог найти лучший способ решить эту проблему, поэтому я внедрил метод удаления записи кэша, чтобы удалить запись после успешного завершения события обновления.

 public void removeHTTPCacheEntry(final String cachedDelURL) {
    try {
        if (client != null && client.cache() != null && client.cache().urls() != null) {



            Iterator<String> cacheURlsItr = client.cache().urls();
            while (cacheURlsItr.hasNext()) {
                try {
                    URL cachedURL = new URL(cacheURlsItr.next());

                    String urlPath = cachedURL == null ? "" : cachedURL.getPath();


                    if (!StringUtils.isEmpty(urlPath) && cachedDelURL.equals(urlPath)) {
                        cacheURlsItr.remove();

                        break;
                    }
                } catch (MalformedURLException e1) {
                    Log.e(TAG, "MalformedURLException", e1);

                }
            }
        }
    } catch (IOException e1) {
        Log.e(TAG, "removeHTTPCacheEntry", e1);
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...