从 assets 文件夹加载 HTML 的 WebView

161
我想从assets目录加载一个HTML页面,我尝试了这个方法,但失败了。
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);  
    }  
}

我在LogCat日志中没有看到任何明显的错误信息...


请查看我的其他答案:https://dev59.com/eVXTa4cB1Zd3GeqP1GNe#8694428 - Martin
4个回答

321
你在设置内容视图之前获取了 WebView,所以 wv 可能为空。
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
        }  
    }

就是这样了。我一开始就是这样做的,试着交换过,但现在它可以工作了......酷。 - AndyD273
顺便问一下,在Android中,白底黑字是标准外观吗? 默认情况下,我的所有表视图都是白底黑字的,但我的HTML设置为黑底白字...我可以更改它们,但不确定要更改哪个。 - AndyD273
在我的网站移动端的联系我们页面中,有一个电子邮件地址。我在Android应用程序中使用了Webview,并设置了URL以打开该网址的联系我们.html页面。当用户点击电子邮件链接时,会出现未知的URL模式错误。 - Harsha
如何在Android应用程序中使用服务器运行HTML文件? - user3441799

17

每当您创建一个活动时,必须在超级调用后添加setcontentview(您的布局)。因为setcontentview将xml绑定到您的活动中,这就是您得到nullpointerexception的原因。

 setContentView(R.layout.webview);  
 webView = (WebView) findViewById(R.id.webView1);
 wv.loadUrl("file:///android_asset/xyz.html");

7
protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        WebView wb = new WebView(this);
        wb.loadUrl("file:///android_asset/index.html");
        setContentView(wb);
    }


keep your .html in `asset` folder

2
Android文档提到了assets https://developer.android.com/tools/projects/index.html,但无论如何都不起作用,除非我的资产文件夹当前位于错误的文件夹中,即在`main`中。 - Pawel Cioch
我的错,我在不同的位置有一个相同项目的副本,并且一直在错误的副本上添加内容,但是这个带有图片的答案是最好的。https://dev59.com/TmMl5IYBdhLWcg3wkXpx - Pawel Cioch

1
从这里下载源代码(从Android资产中打开html文件

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接