将WebView页面保存到缓存

时间:2013-09-04 07:17:32

标签: java android caching android-webview

我有一个使用WebView的应用程序,我希望该应用程序在第一次连接到互联网时保存网站,以便不再需要进一步的连接。我知道有些人正在将WebView页面保存到缓存中。我做了一些研究,并找到了一些答案,如this one

但问题是我需要一些示例代码来说明如何执行此操作。有人能举例说明如何将网页.html文件保存到Android上的外部存储设备吗?

这是我目前加载网页的唯一代码。

//Connecting to UI elements
webView = (WebView) findViewById(R.id.webView1);

//Loading WebView URL
webView.loadUrl("https://www.easistent.com/urniki/izpis/263/16515/0/0/1");

我需要一些示例代码。我已经看过很多文档和指南,这个例子在网上,但我没有做任何工作。如果有人给我一个评论的例子,我真的很感激。

2 个答案:

答案 0 :(得分:10)

您可以直接使用WebView缓存。

通常,使用WebSettings.setCacheMode激活它,使用模式LOAD_CACHE_ELSE_NETWORK

  

使用缓存资源,即使它们已过期。

像这样使用:

webView.getSettings().setCacheMode(WebSettings.LOAD_CACHE_ELSE_NETWORK);

但是,在您的情况下,页面声明了“no-cache”选项,这可能会阻止WebView将页面完全存储在缓存中。

如果你掌握在服务器端,你也可以使用Application Caches API(有关其工作方式的详细信息,请参阅http://www.html5rocks.com/en/tutorials/appcache/beginner/

答案 1 :(得分:1)

@yeradis(How I can Save WebView Contents to show even when no network available?):

也许使用缓存是最好的方法......为此你应该检查http://developer.android.com/reference/android/webkit/WebSettings.html

“管理WebView的设置状态。首次创建WebView时,它会获得一组默认设置。这些默认设置将从任何getter调用返回。从WebView.getSettings()获取的WebSettings对象与WebView的生命周期。如果WebView被破坏,WebSettings上的任何方法调用都将抛出IllegalStateException。“

Especifically:

public static final int **LOAD_CACHE_ONLY**

自:API级别1不使用网络,仅从缓存加载。与setCacheMode(int). Constant Value: 3 (0x00000003)

一起使用

或者

public static final int **LOAD_CACHE_ELSE_NETWORK**

从以下版本开始:API级别1如果有内容,则使用缓存,即使已过期(例如,历史导航)如果不在缓存中,则从网络加载。与setCacheMode(int). Constant Value: 1 (0x00000001)

一起使用

更新1:

嗯“所有生活中糟糕的代码”,例如:

public static InputStream fetch(String url) throws MalformedURLException,
        IOException {
    DefaultHttpClient httpClient = new DefaultHttpClient();
    HttpGet request = new HttpGet(url);
    HttpResponse response = httpClient.execute(request);
    return response.getEntity().getContent();
}


private static String convertStreamToString(InputStream is)
        throws IOException {

    StringWriter writer = new StringWriter();
    IOUtils.copy(is, writer, "UTF-8");
    return writer.toString();
}

因此,您可以使用InputStream fetch(String url)获取URL,然后使用私有静态String convertStreamToString(InputStream is)将该流转换为String并将该流保存到文件中,稍后您可以将该内容加载到webview ......稍后阅读。

<强> UPDATE2:

或者你可以做一些Java序列化的东西......不记得这是否适用于android xD

发现Java序列化API http://java.sun.com/developer/technicalArticles/Programming/serialization/

的秘密