我正在Android Studio 3.0.1,Xubuntu 16.04 LTS中开发一个Android应用程序,使用WebView作为包含HTML,CSS,JavaScript / jQuery并使用PHP / MySQL作为后端的响应式Web应用程序的包装。几乎所有内容都按预期工作:页面完全呈现,JavaScript运行,并且sign-up / login / news-feed系统按预期工作。
但是,现在我想实现某种简单的缓存系统,以便在没有Internet连接时用户仍可以看到页面的最新可用版本。
到目前为止,我已经设法检测是否存在Internet连接。如果没有连接,WebView将显示一个本地“错误”页面,该页面存储在应用程序文件中-比默认的Android“连接错误”屏幕要好,但用户仍无法从该页面看到图像和文本。离线时的动态消息,例如在Facebook应用中。
我尝试过的方法(Java / Android Studio):
当用户打开应用程序(onCreate)时:
如果没有连接,请检查它试图检索的页面的本地保存版本。如果存在连接,则下次将页面另存为.mht文件:
if (!isConnected()) {
try {
File file = new File(getFilesDir(), FilenameUtils.getBaseName(url));
webView.loadUrl("file://" + file.getAbsolutePath() + ".mht");
} catch (Exception e) {
Toast.makeText(getApplicationContext(), "Exception detected", Toast.LENGTH_LONG).show();
}
} else {
try {
File file = new File(getFilesDir(), FilenameUtils.getBaseName(url));
webView.loadUrl(url);
webView.saveWebArchive("file://" + file.getAbsolutePath() + ".mht");
} catch (Exception e) {
Toast.makeText(getApplicationContext(), "Exception detected", Toast.LENGTH_LONG).show();
}
}
我已经尝试使用webView.saveWebArchive()
具有不同的路径,包括简单/path/to/file
,file:///path/to/file
等等,都没有效果。我最接近在WebView上显示内容的是一堆原始MHTML,但显然它并未呈现。我还得到了“找不到文件”屏幕和纯白屏幕,上面没有任何内容。
如何正确地将WebView中的网页保存到Web存档中,然后从本地存储中检索并将其再次显示为网页?
编辑:
正如greenapps在评论中所建议的那样,我覆盖了WebViewClient中的“ onPageFinished”方法,并在其中调用了“ saveWebArchive()”:
@Override
public void onPageFinished(WebView view, String link) {
view.saveWebArchive(path);
showMsg("Finished loading");
}
当电话连接到Internet并且加载主页时,它确实显示“完成加载”。关闭应用程序后,断开连接并再次打开它,它现在显示的背景为空白,具有原始页面的颜色,没有更多的白色页面或错误消息。但是,没有任何图像,文字或任何东西。
webView.loadUrl(url);
webView.saveWebArchive("file://" + file.getAbsolutePath() + ".mht");.
您无法在此处保存页面。
太早了。
该页面尚未加载。
在onPageLoaded()或onPageFinished()中进行操作。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句