简体   繁体   English

Android WebView,从缓存加载并尝试刷新

[英]Android WebView, load from cache and attempt to refresh

I am trying to create a small app that loads a webpage and stores it in the cache. 我正在尝试创建一个加载网页并将其存储在缓存中的小型应用程序。 When swiping refresh it must attempt to update, but if there is no internet access it should keep the current version. 刷卡刷新时,它必须尝试更新,但是如果没有Internet访问,则应保留当前版本。

Currently, I've got "swipe to force refresh" and "load from the cache" working, but can not seem to figure out how to "attempt to refresh if possible". 目前,我已经可以“刷卡强制刷新”和“从缓存加载”了,但是似乎无法弄清楚如何“尽可能尝试刷新”。

swipeRefreshLayout = findViewById(R.id.swipe);
swipeRefreshLayout.setOnRefreshListener(
        new SwipeRefreshLayout.OnRefreshListener() {
            @Override
            public void onRefresh() {
                myWebView.clearCache(true);
                myWebView.reload();
            }
        }
);

WebSettings webSettings = myWebView.getSettings();
webSettings.setJavaScriptEnabled(true);
webSettings.setAppCacheEnabled(true);
webSettings.setAppCachePath(getBaseContext().getCacheDir().getPath());
webSettings.setCacheMode(WebSettings.LOAD_CACHE_ELSE_NETWORK);

myWebView.loadUrl(config.getString("website_root"));
myWebView.setWebViewClient(new WebViewClient() {
    @Override
    public void onPageStarted(WebView view, String url, Bitmap favicon) {
        if (!swipeRefreshLayout.isRefreshing()) {
            swipeRefreshLayout.setRefreshing(true);
        }
    }

    @Override
    public void onPageFinished(WebView view, String url) {
        swipeRefreshLayout.setRefreshing(false);
    }
});

Base on the documentation for WebSettings.LOAD_CACHE_ELSE_NETWORK : 基于WebSettings.LOAD_CACHE_ELSE_NETWORK文档

Use cached resources when they are available, even if they have expired. 缓存资源可用时,即使它们已过期,也要使用它们。 Otherwise load resources from the network 否则从网络加载资源

Because of this you view is always loaded from cache. 因此,您总是从缓存加载视图。

You can use following method: 1. Check connectivity: 您可以使用以下方法:1.检查连接性:

private boolean isNetworkConnected() {
    ConnectivityManager cm = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);

    return cm.getActiveNetworkInfo() != null;
}
  1. Before instead of setting: 之前而不是设置:

     WebSettings webSettings = myWebView.getSettings(); webSettings.setJavaScriptEnabled(true); webSettings.setAppCacheEnabled(true); webSettings.setAppCachePath(getBaseContext().getCacheDir().getPath()); webSettings.setCacheMode(isNetworkConnected()?WebSettings.LOAD_NO_CACHE: WebSettings.LOAD_CACHE_ONLY); 
  2. On Swipe to refresh, you can do the same: 在滑动以刷新时,您可以执行以下操作:

     swipeRefreshLayout.setOnRefreshListener( new SwipeRefreshLayout.OnRefreshListener() { @Override public void onRefresh() { if(isNetworkConnected()){ ... myWebView.reload(); } else { //Do something for non-connectivity } } }); 

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM