从assets文件夹打开HTML文件

时间:2015-04-29 09:11:04

标签: android webview assets

我正在尝试在我的Android应用程序中打开本地html文件。

该文件位于我的资源文件夹下。所以我正在设置一个WebViewClient并将我的页面加载到其中。 但我得到一个"网页不可用"错误。

这是我的活动代码:

public class LocalDialogActivity extends Activity {

    protected WebView webView;
    private static final String ENROLLMENT_URL = "file:///assets/enrollment.html";

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

        webView = (WebView)findViewById(R.id.local_dialog_webview);
        webView.setWebViewClient(new WebViewClient());

        webView.getSettings().setUseWideViewPort(true);
        webView.getSettings().setLoadWithOverviewMode(true);

        webView.getSettings().setSupportZoom(true);
        webView.getSettings().setBuiltInZoomControls(true);
        webView.getSettings().setDisplayZoomControls(false);


        refreshWebView(webView);

    }

    public void refreshWebView(View view) {
        webView.loadUrl(ENROLLMENT_URL);
    }

和布局文件:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent">

    <WebView
        android:id="@+id/local_dialog_webview"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent" />

</RelativeLayout>

我的AndroidMainfest.xml文件中有互联网权限,可以访问互联网:

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

欢迎任何帮助。 谢谢。

4 个答案:

答案 0 :(得分:6)

尝试使用以下代码加载html

"file:///android_asset/enrollment.html" 

而不是

"file:///assets/enrollment.html"

答案 1 :(得分:6)

如果你的结构应该是这样的:

/assets/html/index.html

/assets/scripts/index.js

/assets/css/index.css

然后做(Android WebView: handling orientation changes

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

确保添加

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

然后只使用网址

<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">

答案 2 :(得分:2)

我认为,最好使用“raw”文件夹。该代码正常工作。

 InputStream is = getResources().openRawResource(R.raw.html_file);

     try {
         int size = is.available();
         byte[] buffer = new byte[size];
         is.read(buffer);
         is.close();
         String str = new String(buffer);
         }catch (IOException e){
            e.printStackTrace();
         }
         webView.loadDataWithBaseURL("", str, "text/html", "UTF-8", "");

答案 3 :(得分:0)

从此处下载源代码(Open html file from assets android

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

谢谢!