从本地文件夹中加载HTML文件到Webview

27

我是Android开发的新手。

我想将一个html文件加载到一个webview中。

请注意,有许多相关的问题在SO上,例如这个问题,但它们都处理从assets文件夹获取**.html*文件的问题。

但如果我的html文件大小约为10MB,则相应的apk大小也会增加到10MB,因此我想从本地文件夹(比如"D://abc.html")加载html文件。

任何帮助都将不胜感激。

编辑

我尝试过 webView.loadUrl("file:///D:/Projects/myWebsite/index.html");

但是它会提示 网页不可用找不到文件错误

4个回答

47

你可以使用:


   WebView webView = // ...

   webView.loadUrl("file:///myPath/myFile.html");

在Android应用中,可以从三种位置读取文件:

  • 内部存储:每个应用都有自己的文件夹,文件名是相对于此位置的。URL采用以下形式:file:///myFolder/myFile.html

  • 外部存储:需要权限,可能并不总是可用。通过调用Environment.getExternalStorageDirectory()获得根目录。因此,使用以下方式构建URL:String url = "file:///" + Environment.getExternalStorageDirectory().toString() + File.separator + "myFolder/myFile.html"

  • Assets:存储在apk中,只能进行只读访问。URL采用以下形式:file:///android_asset/myFolder/myFile.html(另请参见将Android资源加载到WebView中)。


webView1.loadUrl("file:///C:/Users/myName/Desktop/e-magzine/index.html"); 但是它会显示“网页不可用。找不到文件”的消息。 - GAMA
4
Android是Linux的实现,因此Windows风格的路径无法使用。您的路径是相对于应用程序的主文件夹的,但我会查找一些更深入讨论此问题的参考资料。 - Tony the Pony
当您部署应用程序内容时,您必须将其放入apk中或在安装应用程序后下载它。我猜您正在尝试在模拟器中测试应用程序,并且不想为每个调试运行打包一个大的apk文件,是吗? - Tony the Pony
嗯,更简单的方法是将其放入资产中?此外,将HTML呈现到Webview中并不那么简单。我需要将初始比例设置为50才能正确查看内容。 - GAMA
让我们在聊天中继续这个讨论:http://chat.stackoverflow.com/rooms/10272/discussion-between-tony-the-pony-and-gama - Tony the Pony
显示剩余3条评论

5
在Android 4.4 KitKat中,会抛出“不允许加载本地资源:file:///..”的错误。这个错误会在loadURL时出现,唯一的替代方案是使用“loadDataWithBaseURL”。
webView.loadDataWithBaseURL("file:///android_asset/demo/",
                             tmpDocumentText,"text/html", "UTF-8", null);

wbHelp.loadUrl("file:///android_asset/Help.html"); 在5.1+版本中可用,如果是内部存储,则不确定是否需要写外部存储。 - behelit

3

0

如果文件存在于Android Studio项目中,可以使用此方法来加载文件(请注意,android_res实际上是res文件夹,不应替换)。

webView.loadUrl("file:///android_res/drawable/FILENAME.EXTENSION");

但如果那不起作用,请尝试另一种加载文件的方式,例如

webView.loadDataWithBaseURL("file:///android_asset/demo/",tmpDocumentText,
                         "text/html", "UTF-8", null);

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接