2010-06-30 9 views
115

estoy tratando de cargar una página HTML desde el directorio de activos. Intenté esto, pero falla.Webview html carga desde el directorio de activos

public class ViewWeb extends Activity { 
    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     WebView wv; 
     wv = (WebView) findViewById(R.id.webView1); 
     wv.loadUrl("file:///android_asset/aboutcertified.html"); // fails here 
     setContentView(R.layout.webview); 
    } 
} 

que realmente no obtener ningún error reveladores en LogCat ...

+0

ver mi otra respuesta: http://stackoverflow.com/a/8694428/341091 – Martin

Respuesta

242

que está recibiendo el WebView antes de la vista del contenido de modo que el WV es probablemente nula.

public class ViewWeb extends Activity { 
     @Override 
     public void onCreate(Bundle savedInstanceState) { 
      super.onCreate(savedInstanceState); 
      setContentView(R.layout.webview); 
      WebView wv; 
      wv = (WebView) findViewById(R.id.webView1); 
      wv.loadUrl("file:///android_asset/aboutcertified.html"); // now it will not fail here 
     } 
    } 
+0

Eso fue todo. Lo tenía para empezar, intenté cambiarlo, pero ahora funciona ... Genial. – AndyD273

+0

En una nota lateral, ¿el blanco sobre negro es un aspecto estándar en Android? Todos mis vistas de tabla son de color blanco sobre negro por defecto, pero mi html se establece para negro sobre blanco ... puedo cambiarlas, pero no está seguro de cuál de ellos para cambiar. – AndyD273

+10

Esto parece no funcionar más con honeycomp. Damm. – Martin

11

Siempre que va a crear la actividad, debe agregar setcontentview (su diseño) después de la llamada de super. Debido a que setcontentview enlaza xml en su actividad, esa es la razón por la que obtiene nullpointerexception.

setContentView(R.layout.webview); 
webView = (WebView) findViewById(R.id.webView1); 
wv.loadUrl("file:///android_asset/xyz.html"); 
4
protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 
     WebView wb = new WebView(this); 
     wb.loadUrl("file:///android_asset/index.htm"); 
     setContentView(wb); 
    } 


keep your .html in `asset` folder 
+4

Esto es casi idéntica a la respuesta aceptada – Matt

+1

doc Andoid se refiere a 'assets' https://developer.android.com/tools/projects/index.html en cualquiera de los casos no funciona, a menos que mi activo (s) está en carpeta carpeta equivocada actualmente en 'main' –

+0

Mi malo que tenía una copia del mismo proyecto en la ubicación diversa, y estaba añadiendo a la copia mal, pero esta respuesta con la imagen es la mejor http://stackoverflow.com/questions/18302603/where- to-place-assets-folder-in-android-studio –

-1

descargar el código fuente desde aquí (Open html file from assets android)

activity_main.xml

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
android:layout_width="match_parent" 
android:background="#FFFFFF" 
android:layout_height="match_parent"> 

<WebView 
android:layout_width="match_parent" 
android:id="@+id/webview" 
android:layout_height="match_parent" 
android:layout_margin="10dp"></WebView> 
</RelativeLayout> 

MainActivity.java

package com.deepshikha.htmlfromassets; 
import android.app.ProgressDialog; 
import android.support.v7.app.AppCompatActivity; 
import android.os.Bundle; 
import android.webkit.WebView; 
import android.webkit.WebViewClient; 

public class MainActivity extends AppCompatActivity { 

WebView webview; 
ProgressDialog progressDialog; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
super.onCreate(savedInstanceState); 
setContentView(R.layout.activity_main); 
init(); 
} 

private void init(){ 
webview = (WebView)findViewById(R.id.webview); 
webview.loadUrl("file:///android_asset/download.html"); 
webview.requestFocus(); 

progressDialog = new ProgressDialog(MainActivity.this); 
progressDialog.setMessage("Loading"); 
progressDialog.setCancelable(false); 
progressDialog.show(); 

webview.setWebViewClient(new WebViewClient() { 

public void onPageFinished(WebView view, String url) { 
try { 
progressDialog.dismiss(); 
} catch (Exception e) { 
e.printStackTrace(); 
} 
} 
}); 
} 
} 
Cuestiones relacionadas