2010-06-30 4 views
115

J'essaie de charger une page html à partir du répertoire assets. J'ai essayé, mais ça échoue.Webview charger html à partir du répertoire des ressources

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); 
    } 
} 

Je ne suis pas vraiment des erreurs révélatrices dans LogCat ...

+0

Voir mon autre réponse: http://stackoverflow.com/a/8694428/341091 – Martin

Répondre

242

vous obtenez le WebView avant de l'afficher le contenu de sorte que le wv est probablement nulle.

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

C'était tout. Je l'avais comme ça pour commencer, j'ai essayé de l'échanger, mais maintenant ça marche ... Cool. – AndyD273

+0

Sur une note de côté, le blanc sur noir est-il un classique dans Android? Toutes les vues de ma table sont blanches sur noir par défaut, mais mon html est défini en noir sur blanc ... Je peux les changer, mais je ne sais pas lequel changer. – AndyD273

+10

Cela semble ne plus fonctionner avec honeycomp. Damm. – Martin

11

Chaque fois que vous créez une activité, vous devez ajouter setcontentview (votre mise en page) après appel super. Parce que setcontentview lier xml dans votre activité, c'est la raison pour laquelle vous obtenez 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

Ceci est presque identique à la réponse acceptée – Matt

+1

Andoid doc se réfère à 'assets' https://developer.android.com/tools/projects/index.html dans les deux cas ne fonctionne pas, sauf si mon dossier actif (s) est en mauvais dossier actuellement dans 'main' –

+0

Mon mauvais j'ai eu une copie du même projet dans un endroit différent, et était en ajoutant à la mauvaise copie, mais cette réponse avec l'image est le meilleur http://stackoverflow.com/questions/18302603/where- to-place-assets-dossier-dans-android-studio –

-1

Télécharger le code source ici (Open html file from assets android)

de 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(); 
} 
} 
}); 
} 
} 
Questions connexes