Pregunta Cargando archivo .html existente con Android WebView


Intenté muestras, demostraciones de códigos de Google y otros recursos con WebView, pero cuando trato de hacerlo en mi propio código, no funciona para mí.

Quiero cargar myfile.html que puse en la carpeta de activos, y usando:

private WebView myWebView;

myWebView.loadUrl("file:///android_assets/myfile.html");

El emulador muestra un error

La página web en file:///android_assets/myfile.html no pudo ser   cargado como: no se encontró el archivo solicitado.    /android_assets/myfile.html

Cuando puse ese archivo en res/raw/ carpeta y usando:

myWebView.loadUrl("file:///android_res/raw/myfile.html");

entonces solo el emulador android 2.2 API nivel 8 puede cargar el archivo probablemente, otras versiones anteriores muestran el mismo error. ¿Me estoy perdiendo de algo?

¿Hay alguna forma de cargar un archivo .html existente en el paquete de la aplicación que funciona en todas las versiones de API?


73
2017-10-26 20:27


origen


Respuestas:


bien, ese fue mi muy estúpido error. Publiqué la respuesta aquí en caso de que alguien tenga el mismo problema.

La ruta correcta para los archivos almacenados en la carpeta de activos es file:///android_asset/* (sin la carpeta "s" para activos, que siempre pensé que debía tener una "s").

Y, mWebView.loadUrl("file:///android_asset/myfile.html"); funciona bajo todos los niveles de API.

Todavía no entiendo por qué mWebView.loadUrl("file:///android_res/raw/myfile.html"); funciona solo en API nivel 8. Pero no importa ahora.


143
2017-10-27 02:41



pegue su archivo .html en la carpeta de activos de su carpeta de proyectos. y crea un archivo xml en la carpeta de diseño con el código fol: my.xml:

<WebView  xmlns:android="http://schemas.android.com/apk/res/android"
  android:id="@+id/webview"
  android:layout_width="fill_parent"
  android:layout_height="fill_parent"
    />

agregar el código fol en la actividad

setContentView(R.layout.my);
    WebView mWebView = null;
    mWebView = (WebView) findViewById(R.id.webview);
    mWebView.getSettings().setJavaScriptEnabled(true);
    mWebView.loadUrl("file:///android_asset/new.html"); //new.html is html file name.

16
2017-12-22 08:31



Si su estructura debe ser así:

/assets/html/index.html

/assets/scripts/index.js

/assets/css/index.css

Entonces solo hazlo ( Android WebView: manejo de los cambios de orientación )

    if(WebViewStateHolder.INSTANCE.getBundle() == null) { //this works only on single instance of webview, use a map with TAG if you need more
        webView.loadUrl("file:///android_asset/html/index.html");
    } else {
        webView.restoreState(WebViewStateHolder.INSTANCE.getBundle());
    }

Asegúrate de agregar

    WebSettings webSettings = webView.getSettings();
    webSettings.setJavaScriptEnabled(true);
    webSettings.setJavaScriptCanOpenWindowsAutomatically(true);
    if(android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.JELLY_BEAN) {
        webSettings.setAllowFileAccessFromFileURLs(true);
        webSettings.setAllowUniversalAccessFromFileURLs(true);
    }

Entonces solo usa las URL

<html>
<head>
    <meta charset="utf-8">
    <title>Zzzz</title>
    <script src="../scripts/index.js"></script>
    <link rel="stylesheet" type="text/css" href="../css/index.css">

8
2018-04-16 14:26



Copie y pegue su archivo .html en la carpeta de activos de su proyecto y agregue el siguiente código en su actividad en onCreate ().

        WebView view = new WebView(this);
        view.getSettings().setJavaScriptEnabled(true);
        view.loadUrl("file:///android_asset/**YOUR FILE NAME**.html");
        view.setBackgroundColor(Color.TRANSPARENT);
        setContentView(view);

6
2017-08-19 06:37



Podrías leer el archivo html manualmente y luego usar loadData o loadDataWithBaseUrl métodos de WebView para mostrarlo.


2
2017-10-26 20:32



los compilación de depuración es diferente de la lanzamiento uno, entonces:

Considere su estructura de archivo de proyecto así [este caso si para un ensamblado de depuración]

src
  |
  main
  debug
      |
      assets
           |
           index.html

Debería llamar index.html a su WebView como:

WebView web=(WebView)findViewById(R.id.web);
web.loadUrl("file:///android_asset/index.html");

El diseño:

<WebView
android:id="@+id/web"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_gravity="top"/>

Entonces, para el montaje de Release, debería ser como:

src
  |
  main
  release
        |
        assets
             |
             index.html  

1
2018-06-06 05:54



También asegúrate de no olvidar:

<uses-permission android:name="android.permission.INTERNET" />


-6
2017-12-26 20:23