[英]Android WebView, load from cache and attempt to refresh
我正在嘗試創建一個加載網頁並將其存儲在緩存中的小型應用程序。 刷卡刷新時,它必須嘗試更新,但是如果沒有Internet訪問,則應保留當前版本。
目前,我已經可以“刷卡強制刷新”和“從緩存加載”了,但是似乎無法弄清楚如何“盡可能嘗試刷新”。
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);
}
});
基於WebSettings.LOAD_CACHE_ELSE_NETWORK
的文檔 :
緩存資源可用時,即使它們已過期,也要使用它們。 否則從網絡加載資源
因此,您總是從緩存加載視圖。
您可以使用以下方法:1.檢查連接性:
private boolean isNetworkConnected() {
ConnectivityManager cm = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);
return cm.getActiveNetworkInfo() != null;
}
之前而不是設置:
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);
在滑動以刷新時,您可以執行以下操作:
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.