【发布时间】:2019-03-09 13:56:40
【问题描述】:
我需要以一种在没有互联网时它会使用缓存的方式缓存 WebView,而当有互联网时它将使用在线页面。由于我的 WebView 类在 onCreateView 中执行 loadUrl(),它每次都会重新加载它,所以我需要缓存有两个原因:加载速度更快,但主要用于应用程序的离线使用。
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 错误
【问题讨论】:
-
不,我已经合并了所有内容并尝试了所有缓存模式,但仍然无法正常工作
-
启用javascript并重试
-
添加了 JavaScript 和其他布尔值但仍然不起作用,请检查更新的代码
标签: java android android-webview android-websettings