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
@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/
You can directly use the WebView cache.
Typically, this is activated with the WebSettings.setCacheMode, using the mode LOAD_CACHE_ELSE_NETWORK
Use cached resources when they are available, even if they have expired.
Use like so :
webView.getSettings().setCacheMode(WebSettings.LOAD_CACHE_ELSE_NETWORK);
However, in your case, the page declares a 'no-cache' option, which may prevent the WebView to store the page in cache altogether.
If you have the hand on the server side, you can also use the Application Caches API (see http://www.html5rocks.com/en/tutorials/appcache/beginner/ for more details on how that works)