【问题标题】:View index.html found in the assets folder using NanoHttpd server embedded within my app使用嵌入在我的应用程序中的 NanoHttpd 服务器查看资产文件夹中的 index.html
【发布时间】:2019-02-14 18:36:53
【问题描述】:

我有一个应用程序(我们称之为主应用程序),它在资产文件夹中有一个 index.html 页面。 index.html 是一个带有一些 JavaScript 的简单 HTML 文件。它不需要 PHP 或 MySql。

我要做的是将 NanoHttpd 服务器嵌入到我的主应用程序中,并在应用程序启动或恢复时自动启动 Nano 服务器,并在我的应用程序中查看我的 index.html 文件。虽然我知道我可以使用

webView.loadUrl("file:///android_asset/index.html"); 

要访问 index.html 文件,在这种情况下不可能这样做。因此需要使用网络服务器。

现在我有一个不同的专用应用程序作为 Web 服务器,它运行在 http://localhost:8080。当我打开主应用程序时,它会自动运行。如您所见,为了查看 HTML 文件,您需要启动 Web 服务器,启动它,然后返回主应用程序并启动它。我想要一个解决方案,让 NanoHttpd 服务器在我的主应用程序午餐时自动启动并开始在 web 视图上显示 index.html 内容。这是我的代码,可以完美地使用我的主应用程序和网络服务器

   WebView wv;
   wv = (WebView) findViewById(R.id.webView1);
   WebSettings webSettings = wv.getSettings();
   webSettings.setJavaScriptEnabled(true);
   wv.loadUrl("http://localhost:8080/index.html");   

虽然 O 找不到它的确切文档,但我从以下链接尝试了两种不同的方法

  1. Using NanoHTTPD in Android

  2. http://programminglife.io/android-http-server-with-nanohttpd/

两者都不起作用,一个只是显示一个白页,而其他的只是给我一个服务器正在运行的响应。

那么如何在我的应用程序启动时自动启动 NanoHttpd 服务器并自动将我的资产文件夹中的 html 文件启动到 web 视图? 如果对 NanoHttpd 的要求太多了,有没有另一种方法可以在应用程序中嵌入网络服务器并启动 index.html?

【问题讨论】:

  • 只是一个普通的 WebView.loadUrl(asset.html) 不适合您的项目?如果您有一个没有太多复杂性的构建网站(例如 php、mysql 等),只需将此网站复制到您的资产文件夹并在您的 webview 上打开它。在这种情况下,不需要 httpd 守护进程。
  • @statosdotcom index.html 实际上是一个包含大量 JavaScript 的 html 文档。无需 php,无需 MySQL。由于浏览器安全性,无法通过 file:/// 加载文件

标签: android webserver android-webview


【解决方案1】:

假设您的 assets 文件夹中的 HTML 结构遵循此层次结构:

+ src
++ main
+++ assets
+++ java
+++ res

您可以使用以下方法打开没有安全限制的本地文件:

webView.loadUrl("file:///android_asset/index.html");

您还应该设置它以使 Javascript 在加载内容之前在本地运行:

webView.getSettings().setDomStorageEnabled(true);
webView.getSettings().setJavaScriptEnabled(true);

此外,您可以设置一些其他设置以最适合您的需求,例如:

setBuiltInZoomControls(true);
setSupportZoom(true);
setDefaultTextEncodingName("utf-8"); // support international chars
setUserAgentString("myVeryOwnUserAgent");  // personalize UA

等等。

【讨论】:

  • 谢谢,但是由于浏览器安全限制,webView.loadUrl("file:///android_asset/index.html") 不起作用,这就是我需要网络服务器的原因。我已使用此信息更新问题
  • 对不起。我认为你错了,恕我直言,先生。你试过我的提议了吗?我有许多遵循这种格式的工作项目。请仔细阅读,实施,然后返回这里。看:f:/// 是一回事,file:/// 是另一回事。另外:有大量示例说明如何将本地文件打开到 webView 中。根本没有安全问题。尝试使用简单的 helloworld html。也许这件事是另一点,也许是一个试图加载外部内容的js。
  • 我的错误,f:/// 是一个错字。虽然您绝对正确,我可以通过这种方式访问​​文件,但我不能为这个项目这样做。这就是为什么我必须使用网络服务器。如果您想了解我为什么不能这样做的详细信息,请查看以下链接(这是一个长网址,所以复制整个网址并粘贴它)kolor.com/wiki-en/action/view/Panotour_-FAQ-_Viewing_the_tour_offline#Local_usage_with_file:。 2F.2F_urls_is_limited_due_to_browser_security_restrictions.21
  • 我关注了你的第一条评论:Loading the file via file:/// doesn’t work due to browser security,直到现在,毕竟,我们看到它(充其量)不完整。感谢您对试图帮助您的人的尊重。
  • 我很抱歉一开始没有提出完整的问题,如您所见,我正在尝试更新我的问题以更好地提供有关该问题的准确信息。无论如何,非常感谢您宝贵的时间。我真的很感激
【解决方案2】:

假设真的只有一个单个 HTML 文件,以下在 Java 中工作,尝试在您的计算机上运行它:

public class Server extends NanoHTTPD {
    final private String indexString = readFile("in/index.html");

    public static void main(String[] args) throws IOException {
        Server server = new Server();
        server.start();
        while(true){};
    }

    public Server() throws IOException {
        super(8080);
    }

    @Override
    public Response serve(IHTTPSession session) {
        return newFixedLengthResponse(indexString);
    }

    private static String readFile(String path) throws IOException {
        BufferedReader br = new BufferedReader(new FileReader(path));
        try {
            StringBuilder sb = new StringBuilder();
            String line = br.readLine();

            while (line != null) {
                sb.append(line);
                sb.append("\n");
                line = br.readLine();
            }
            return sb.toString();
        } finally {
            br.close();
        }
    }
}

主要方法是一个示例用法。要使其在您的应用程序上运行,请按照示例启动服务器,然后使用webView.loadUrl("http://localhost:8080"); 而不是无限循环(用于确保示例应用程序不会提前退出)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-12-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-05-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多