从缓存中加载 webview

Posted

技术标签:

【中文标题】从缓存中加载 webview【英文标题】:Load webview from cache 【发布时间】:2013-06-20 00:27:27 【问题描述】:

我需要在可以访问 Internet 时从 Internet 加载 mWebview。当它不可用时,它需要从缓存中加载。我有一些东西,但它根本不加载网站

请帮帮我?

已添加权限: - android.permission.INTERNET - android.permission.WRITE_EXTERNAL_STORAGE - android.permission.ACCESS_NETWORK_STATE

private boolean isNetworkAvailable() 
    ConnectivityManager connectivityManager = (ConnectivityManager) getSystemService( CONNECTIVITY_SERVICE );
    NetworkInfo activeNetworkInfo = connectivityManager.getActiveNetworkInfo();
    return activeNetworkInfo != null;



@SuppressLint("SetjavascriptEnabled")
@Override
public void onCreate(Bundle savedInstanceState) 
    super.onCreate(savedInstanceState);
    // Layout Webview
    mWebview  = new WebView(this);
    // Broadcast
    Toast.makeText(this, "Laden van roosterwijzigingen.",
    Toast.LENGTH_SHORT).show();
    // Enable JavaScript
    mWebview.getSettings().setJavaScriptEnabled(true); // enable javascript
    mWebview.setHorizontalScrollBarEnabled(false);
    mWebview.getSettings().setAppCacheMaxSize( 5 * 1024 * 1024 ); // 5MB
    mWebview.getSettings().setAppCachePath( getApplicationContext().getCacheDir().getAbsolutePath() );
    mWebview.getSettings().setAllowFileAccess( true );
    mWebview.getSettings().setAppCacheEnabled( true );
    mWebview.getSettings().setCacheMode( WebSettings.LOAD_DEFAULT ); // load online by default
    final Activity activity = this;
    // Make WebClient
    mWebview.setWebViewClient(new WebViewClient()  
    // Trace Errors
    public void onReceivedError(WebView view, int errorCode, String description, String failingUrl) 
    Toast.makeText(activity, description, Toast.LENGTH_SHORT).show();
    
); 
    if ( !isNetworkAvailable() )  // loading offline
        mWebview.getSettings().setCacheMode( WebSettings.LOAD_CACHE_ELSE_NETWORK );
    

    mWebview.loadUrl("http://divers.ommelandercollege.nl/webportalen/dagrooster.php");


【问题讨论】:

【参考方案1】:

我检查了您的代码并且缓存工作正常(使用http://yahoo.com 进行了测试)。您的问题必须出在 isNetworkAvailable() 方法中,因此不会调用 setCacheMode( WebSettings.LOAD_CACHE_ELSE_NETWORK)

要对此进行测试,请让 isNetworkAvailable() 始终返回 false,并在首次加载网页后将您的设备置于飞行模式。

【讨论】:

这是不可能的,因为它根本不加载。即使我有 wifi 连接【参考方案2】:
if ( !isNetworkAvailable() )  // loading offline
    mWebview.getSettings().setCacheMode( WebSettings.LOAD_CACHE_ELSE_NETWORK );
style="color:red">// move this bracket

mWebview.loadUrl("http://divers.ommelandercollege.nl/webportalen/dagrooster.php");
// to here   

【讨论】:

您的问题存在严重的格式问题,难以阅读。您可以对其进行编辑以使用代码格式。解释也总是有帮助的! :) 虽然这段代码 sn-p 可以解决问题,但including an explanation 确实有助于提高帖子的质量。请记住,您是在为将来的读者回答问题,而这些人可能不知道您提出代码建议的原因。

以上是关于从缓存中加载 webview的主要内容,如果未能解决你的问题,请参考以下文章

从缓存中加载 webview

即使超过缓存控制年龄限制,值也会从缓存中加载

无法从缓存 okHttp 和改造中加载数据

有没有办法检查页面是不是从浏览器缓存中加载?

如何强制 Java Applet 从缓存中加载

Android WebView 未从缓存中加载第二页