Saving WebView page to cache

后端 未结 2 622
旧巷少年郎
旧巷少年郎 2021-01-05 20:31

I have an app with WebView and I want the app to save the website the first time it is connected to the internet so that a further connection is no longer needed. I know som

2条回答
  •  臣服心动
    2021-01-05 20:47

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

    Maybe using a cache is the best way... for that you should check http://developer.android.com/reference/android/webkit/WebSettings.html

    "Manages settings state for a WebView. When a WebView is first created, it obtains a set of default settings. These default settings will be returned from any getter call. A WebSettings object obtained from WebView.getSettings() is tied to the life of the WebView. If a WebView has been destroyed, any method call on WebSettings will throw an IllegalStateException."

    Especifically:

    public static final int **LOAD_CACHE_ONLY**
    

    Since: API Level 1 Don't use the network, load from cache only. Use with setCacheMode(int). Constant Value: 3 (0x00000003)

    Or

    public static final int **LOAD_CACHE_ELSE_NETWORK**
    

    Since: API Level 1 Use cache if content is there, even if expired (eg, history nav) If it is not in the cache, load from network. Use with setCacheMode(int). Constant Value: 1 (0x00000001)

    Update 1:

    hmm "crappy code of all life" for example:

    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();
    }
    

    So, you can fetch a url with InputStream fetch(String url) an then convert that stream to String with private static String convertStreamToString(InputStream is) and save that stream to a file, later you can load that content to a webview... to read later.

    Update2:

    Or you can do some Java Serialization stuff... cant remember if this work on android xD

    Discover the secrets of the Java Serialization API http://java.sun.com/developer/technicalArticles/Programming/serialization/

提交回复
热议问题