Мне нужно кэшировать WebView таким образом, чтобы он использовал кеш, если нет интернета, а когда есть интернет, он будет использовать онлайн-страницу.Так как мой класс с WebView выполняет loadUrl () в onCreateView, он перезагружает его каждый раз, поэтому мне нужен кэш по двум причинам: более быстрая загрузка, но в основном для автономного использования приложения.
import android.os.Bundle;
import android.support.annotation.NonNull;
import android.support.annotation.Nullable;
import android.support.v4.app.Fragment;
import android.net.ConnectivityManager;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.webkit.WebSettings;
import android.webkit.WebView;
import android.webkit.WebViewClient;
public class CalendarFragment extends Fragment {
private WebView webView;
@Nullable
@Override
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.calendar_layout, container, false);
webView = (WebView) view.findViewById(R.id.calendarWebView);
webView.getSettings().setAppCacheEnabled(true);
webView.getSettings().setDomStorageEnabled(true);
webView.getSettings().setAllowFileAccess(true);
webView.getSettings().setJavaScriptEnabled(true);
webView.getSettings().setAppCachePath(getContext().getCacheDir().getPath());
webView.getSettings().setCacheMode(WebSettings.LOAD_CACHE_ELSE_NETWORK);
webView.setWebViewClient(new WebViewClient());
webView.loadUrl("https://calendar.google.com/calendar/htmlembed?src=wlmacci%40gmail.com&ctz=America%2FToronto");
//webView.loadUrl("https://sites.google.com/view/wlmac/textfile?");
//webView.loadUrl("https://google.ca");
webView.getSettings().setLoadWithOverviewMode(true);
webView.getSettings().setUseWideViewPort(true);
return view;
}
}
У меня естьпробовал LOAD_DEFAULT
так же как LOAD_CACHE_ELSE_NETWORK
и ни один из них не работал;когда я переключаюсь с фрагмента календаря и возвращаюсь к нему с выключенным WiFi, я получаю net::ERR_ADDRESS_UNREACHABLE
обновление: не работает с LOAD_CACHE_ONLY
либо
обновление: добавлено ACCESS_NETWORK_STATE
и ACCESS_WIFI_STATE
, теперь я получаю net::ERR_INTERNET_DISCONNECTED
ошибка
Источники, из которых я узнал: Источник 1 Источник 2