在WebView中脱机显示某个页面的最简单方法是什么?

时间:2013-09-08 22:16:42

标签: java android eclipse

我正在创建一个使用WebView打开某个网页的应用。通常情况下,我会手动下载网页并将其放入资产中,然后从那里用WebView打开它,但是这个网站包含的信息每月更改几次,这就是为什么我想让它保持最新状态。

但在保持网站最新的同时,我也希望我的用户能够在离线状态下访问该网站。

这就是我希望它发挥作用的方式:

  1. 如果下载的html文件尚未存在于外部存储设备上,请下载
  2. 如果没有互联网连接并且html文件存在,则显示该html文件
  3. 如果有互联网连接并且html文件也存在,则显示来自互联网的内容并将html文件替换为较新版本
  4. 我做了一些研究,所有我能找到的是将WebView保存在缓存中,但这是不可能的,因为我在WebView中打开的网站已禁用缓存(我没有管理权限,我无法联系网站管理员)。

    我还对如何使用webview下载和显示html文件进行了大量研究,但没有任何我可以信赖的好例子。

    这是我要显示和下载的页面:https://www.easistent.com/urniki/263/razredi/16515

1 个答案:

答案 0 :(得分:0)

首先检查互联网(您可以在S.O.上找到许多已解决的问题),如果有互联网连接,请使用HttpClient获取HTML源并将其保存到外部存储。然后从webview中的外部存储加载网页。如果没有互联网连接,只需在webview中加载页面。

在互联网可用时保存和更新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在评论中所说,使用另一个线程在后台执行此工作。