wake-up-neo.com

Laden der HTML-Datei in Android aus dem Asset-Ordner in die Webansicht

Ich verwende Android Studio/Gradle.

der Ordner app\src\main\Android_asset enthält die Datei chart.html.

Ich versuche, diese Datei folgendermaßen in meinen Webview zu laden:

WebView view = new WebView(this);
view.getSettings().setJavaScriptEnabled(true);
view.loadUrl("file:///Android_asset/chart.html");
setContentView(view);

Ich bekomme aber immer die Fehlermeldung: konnte nicht geladen werden, weil ERR_FILE_NOT_FOUND.

Was fehlt mir hier?

20
Badr Hari

Der Verzeichnisname sollte assets not Android_assets sein. 

Mach das so: enter image description here

Wie in den obigen Bildern gezeigt, klicken Sie einfach mit der rechten Maustaste auf Ihre App-> Neu-> Ordner-> Assets-Ordner  

Legen Sie nun Ihre .html -Datei hier im assets Ordner ab.

Das ist es. Erledigt.

Das Verbleibende ist im Code dasselbe, was Sie getan haben.

WebView view = new WebView(this);
view.getSettings().setJavaScriptEnabled(true);
view.loadUrl("file:///Android_asset/hello.html");
setContentView(view);
45
Rustam

Ähnliches Problem:

Ich verwende viele productFlavors mit unterschiedlicher applicationId.

Wenn ich versuche, eine HTML-Datei aus res/raw/file.html zu laden, erhalte ich eine ClassNotFoundException Klasse "product.flavor.package.R $ raw" nicht gefunden.

Die R.Java-Datei hat einen anderen Paketnamen.

Es sieht so aus, als könnten Sie eine URL nicht aus einer Datei laden: WebView.loadUrl ("file: ///Android_res/raw/page.html"); weil das WebView versucht, die R.class-Datei mit einem anderen Paketnamen zu verwenden.

Ich nehme an, das ERR_FILE_NOT_FOUND vom Laden einer HTML-Datei aus Assets hat das gleiche Problem, aber Sie sehen nicht die Ausnahme .

Mit dieser kleinen Arbeit löse ich mein Problem:

try {
        AssetManager assetManager = context.getAssets();
        InputStream stream = assetManager.open("page.html");
        BufferedReader r = new BufferedReader(new InputStreamReader(stream));
        StringBuilder total = new StringBuilder();
        String line;
        while ((line = r.readLine()) != null) {
            total.append(line).append("\n");
        }
        webView.loadDataWithBaseURL(null, total.toString(), "text/html", "UTF-8", null);
    } catch (Exception xxx) {
        Log.e(TAG, "Load assets/page.html", xxx);
    }

Ich hoffe, das hilft ... Stephan

9
Gugelhupf

Antwort von Gugelhupf aber mit Rohstoff.
Vorteil dieser Lösung: Sie halten die Übersetzung am Laufen!

WebView webView = findViewById(R.id.about_text);
try {
  InputStream inputStream = getResources().openRawResource(R.raw.about);
  BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(inputStream));
  StringBuilder stringBuilder = new StringBuilder();
  String line;
  while ((line = bufferedReader.readLine()) != null) {
    stringBuilder.append(line).append("\n");
  }
  webView.loadDataWithBaseURL(null, stringBuilder.toString(), "text/html", "UTF-8", null);
} catch (IOException e) {
  e.printStackTrace();
}
0
Harry