Как я могу сохранить содержимое WebView, чтобы показывать, даже если сеть недоступна?

Я создаю приложение и использую WebView для открытого URL. Я вижу, что некоторые приложения предлагают пользователю "Сохранить страницу" (веб-страницу).

Я хочу знать, как сохранить страницу из моего WebView, чтобы я мог показать ее пользователю, когда он запрашивает.

Ответ 1

Возможно, использование кеша - лучший способ... для этого вы должны проверить http://developer.android.com/reference/android/webkit/WebSettings.html

"Управляет состояниями настроек для WebView. Когда WebView является первым созданный, он получает набор настроек по умолчанию. Эти настройки по умолчанию будет возвращен из любого метода получения. Полученный объект WebSettings из WebView.getSettings() привязана к жизни WebView. Если WebView был уничтожен, любой вызов метода в WebSettings будет исключение IllegalStateException."

Especifically:

public static final int **LOAD_CACHE_ONLY**

С: API уровня 1 Не используйте сеть, загружайте только из кеша. Используйте с setCacheMode (int). Постоянное значение: 3 (0x00000003)

или

public static final int **LOAD_CACHE_ELSE_NETWORK**

С: API уровня 1 Используйте кеш, если контент существует, даже если истек (например, история nav). Если он не находится в кеше, загрузите его из сети. Используйте с setCacheMode (int). Постоянное значение: 1 (0x00000001)

Update1:

hmm "дерьмовый код всей жизни", например:

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

Итак, вы можете получить URL-адрес с InputStream fetch (String url), а затем преобразовать этот поток в String с частной статической строкой convertStreamToString (InputStream is) и сохранить это поток в файл, позже вы можете загрузить этот контент в веб-просмотр..... читать позже

Update2:

Или вы можете использовать некоторые средства Java Serialization... не могу вспомнить, работает ли эта работа на android xD

Откройте секреты API Java Serialization http://java.sun.com/developer/technicalArticles/Programming/serialization/