Java 在WebView中脱机显示特定页面的最简单方法是什么?

Java 在WebView中脱机显示特定页面的最简单方法是什么?,java,android,eclipse,Java,Android,Eclipse,我正在制作一个应用程序,用WebView打开某个网页。通常情况下,我会手动下载网页并将其放入资产中,然后从那里用WebView打开它,但该网站包含的信息每月会更改几次,这就是为什么我希望使其保持最新 但在保持网站最新的同时,我也希望我的用户能够在离线时访问它 这就是我希望它工作的方式: 如果下载的html文件在外部存储器上还不存在,请下载它 如果没有internet连接且html文件存在,则显示该html文件 如果存在internet连接,并且html文件也存在,则显示来自internet的内容

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

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

这就是我希望它工作的方式:

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

    我也做了很多关于如何用webview下载和显示html文件的研究,但是没有任何好的例子可以依赖


    这是我试图显示和下载的页面:

    首先检查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个用户,所以告诉这些人如何正确使用它不会有问题:)