Java 在WebView中脱机显示特定页面的最简单方法是什么?
我正在制作一个应用程序,用WebView打开某个网页。通常情况下,我会手动下载网页并将其放入资产中,然后从那里用WebView打开它,但该网站包含的信息每月会更改几次,这就是为什么我希望使其保持最新 但在保持网站最新的同时,我也希望我的用户能够在离线时访问它 这就是我希望它工作的方式:Java 在WebView中脱机显示特定页面的最简单方法是什么?,java,android,eclipse,Java,Android,Eclipse,我正在制作一个应用程序,用WebView打开某个网页。通常情况下,我会手动下载网页并将其放入资产中,然后从那里用WebView打开它,但该网站包含的信息每月会更改几次,这就是为什么我希望使其保持最新 但在保持网站最新的同时,我也希望我的用户能够在离线时访问它 这就是我希望它工作的方式: 如果下载的html文件在外部存储器上还不存在,请下载它 如果没有internet连接且html文件存在,则显示该html文件 如果存在internet连接,并且html文件也存在,则显示来自internet的内容
这是我试图显示和下载的页面:首先检查internet(您可以在S.O.上找到许多已解决的问题),如果有internet连接,请使用HttpClient获取HTML源代码并将其保存到外部存储。然后从webview中的外部存储加载网页。如果没有internet连接,只需在webview中加载页面即可 在internet可用时保存和更新html源代码:
HttpClient httpclient = new DefaultHttpClient(); // Create HTTP Client
HttpGet httpget = new HttpGet("http://yoururl.com"); // Set the action you want to do
HttpResponse response = httpclient.execute(httpget); // Executeit
HttpEntity entity = response.getEntity();
InputStream is = entity.getContent(); // Create an InputStream with the response
BufferedReader reader = new BufferedReader(new InputStreamReader(is, "iso-8859-1"), 8);
StringBuilder sb = new StringBuilder();
String line = null;
while ((line = reader.readLine()) != null) // Read line by line
sb.append(line + "\n");
String resString = sb.toString(); // Result is here
is.close(); // Close the stream
File file = new File(Environment.getExternalStorageDirectory().toString()+"/Path/to/save/file/index.html");
file.createNewFile();
FileOutputStream f1 = new FileOutputStream(file, false);
PrintStream p = new PrintStream(f1);
p.print(resString);
p.close();
f1.close();
}catch(IOException e){}
编辑:正如@michaelcarrano在评论中所说,在后台使用另一个线程执行此工作。它肯定会工作。我的应用程序也依赖于samething,但我没有使用webview,而是直接显示有用的数据!:)可以我让你轻松了!编辑了答案并提供了一些代码@马修斯:是的!我忘了提那件事了!这是一个边缘案例,但你有没有想过当用户下载应用程序,但没有立即打开它。后来他们决定在没有互联网连接的情况下打开它。。。你将如何处理?您可以将当前页面的一些HTML打包到assets目录中,或者向用户显示一条消息,说明他们需要internet连接。只是想一想。是的,我已经想到了这一点,我的应用程序将只对某些人可用,但最多会有200-300个用户,所以告诉这些人如何正确使用它不会有问题:)