Laden Sie die HTML-Datei in WebView

188

Ich habe eine lokale HTML-Seite zusammen mit mehreren anderen Ressourcen (CSS-Dateien und Javascript-Bibliotheken), auf die ich in eine WebView laden möchte. Wie könnte dies erreicht werden?

Vielleicht nicht die beste Vorgehensweise, aber ich experimentiere immer noch.

klaus johan
quelle
Bei mir hat es funktioniert, wenn ich den Punkt html -webView.loadUrl ("file: /// android_asset / filename") gelöscht habe.
quemeful
4
Gibt es einen Grund, warum Sie die Antwort von @ Joe nicht akzeptieren möchten?
ClassA
3
webview.loadUrl ("file: ///android_asset/sample.html"); - Klicken Sie hier
c49

Antworten:

349

Der einfachste Weg wäre wahrscheinlich, Ihre Webressourcen in den Assets-Ordner zu legen und dann Folgendes aufzurufen:

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

Eine vollständige Kommunikation zwischen Java und Webview finden Sie hier

Update: Der Assets-Ordner ist normalerweise der folgende Ordner: <project>/src/main/assets Dies kann in der Konfigurationseinstellung für den Asset-Ordner in Ihrer Datei geändert <app>.imlwerden wie :

<option name=”ASSETS_FOLDER_RELATIVE_PATH” value=”/src/main/assets” /> Siehe Artikel Wo wird der Assets-Ordner in Android Studio abgelegt?

Joe
quelle
6
Dieses Problem ist wirklich eine FAQ.
Shihpeng
2
Sie könnten es vermutlich auch aus einem String laden, wenn Sie die Verwendung von Assets sehr ablehnen ... (siehe stackoverflow.com/questions/4543349/load-local-html-in-webview )
Joe
24
Dies sollte als richtige Antwort markiert werden, weil es wirklich so ist.
Gorodechnyj
6
@ SK9 Gleiches gilt, wenn ein anderes Asset oder eine andere erwartete Datei fehlt, z. B. wenn Sie den Namen Ihrer Startaktivitätsklasse ändern und nicht aktualisieren, AndroidManifest.xmlum dies widerzuspiegeln. (Persönlich würde ich empfehlen, den URL- / Dateipfad in Zeichenfolgenressourcen einzufügen und von dort aus darauf zuzugreifen, sodass der Pfad mit allen anderen Zeichenfolgendaten für das Programm übereinstimmt, dies hängt jedoch nicht direkt mit dem Problem von Asset / zusammen. Ressourcenabhängigkeit.)
JAB
7
Wenn Sie nicht wissen, wie Sie einen Assets-Ordner erstellen, klicken Sie mit der rechten Maustaste auf "App" -> "Neu" -> "Ordner" -> "Assets-Ordner" und klicken Sie auf "Fertig stellen". Android Studio erstellt den Assets-Ordner im richtigen Pfad. Und Sie müssen nur Ihre HTML-Datei in den neuen Assets-Ordner verschieben. Referenz: stackoverflow.com/questions/18302603/…
Yuchao Zhou
27

wahrscheinlich könnte dieses Beispiel helfen:

  WebView lWebView = (WebView)findViewById(R.id.webView);
  File lFile = new File(Environment.getExternalStorageDirectory() + "<FOLDER_PATH_TO_FILE>/<FILE_NAME>");
  lWebView.loadUrl("file:///" + lFile.getAbsolutePath());
Ajesh
quelle
3
In dem Beispiel dort, in dem sich das HTML im externen Speicher befindet, ist es am besten, es in der Anwendung zu verpacken
Jonathan García
1
"file: ///" ist wichtig, wenn Sie eine HTML-Datei aus dem lokalen Geräteverzeichnis verwenden. Danke
ralphgabb
5

In diesem Fall ist die Verwendung WebView#loadDataWithBaseUrl()besser als WebView#loadUrl()!

webView.loadDataWithBaseURL(url, 
        data,
        "text/html",
        "utf-8",
        null);

url: url / path Zeichenfolge, die auf das Verzeichnis verweist. Alle Ihre JavaScript-Dateien und HTML-Links haben ihren Ursprung. Wenn null, geht es um: leer. data: String, der Ihre hmtl-Datei enthält, zum Beispiel mit BufferedReader gelesen

Weitere Informationen: WebView.loadDataWithBaseURL (java.lang.String, java.lang.String, java.lang.String, java.lang.String, java.lang.String)

khaintt
quelle
3
Was ist eine Datenvariable? Bitte geben Sie ein Beispiel.
IgorGanapolsky
0

Die akzeptierte Antwort funktioniert bei mir nicht. Das funktioniert bei mir

WebSettings webSetting = webView.getSettings();
    webSetting.setBuiltInZoomControls(true);
    webView1.setWebViewClient(new WebViewClient());

   webView.loadUrl("file:///android_asset/index.html");
Jimale Abdi
quelle
Was ist die Version Ihres Handys?
Jimale Abdi