我需要以某种方式缓存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
错误
答案 0 :(得分:0)
添加这些权限以显示清单
Array
尝试此代码,
<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/>
网络连接检查方法
webView = (WebView) view.findViewById(R.id.calendarWebView);
webView.getSettings().setAppCacheMaxSize( 8 * 1024 * 1024 );
webView.getSettings().setAppCachePath(
getApplicationContext().getCacheDir().getAbsolutePath() );
webView.getSettings().setAllowFileAccess( true );
webView.getSettings().setAppCacheEnabled( true );
webView.getSettings().setJavaScriptEnabled( true );
webView.getSettings().setCacheMode( WebSettings.LOAD_DEFAULT );
if ( !isNetworkAvailable() ) //offline
webView.getSettings().setCacheMode( WebSettings.LOAD_CACHE_ONLY );
webView.loadUrl( "https://calendar.google.com/calendar/htmlembed?
src=wlmacci%40gmail.com&ctz=America%2FToronto" );