从资产文件夹打开HTML文件

3

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

该文件位于我的assets文件夹下。因此,我设置了一个WebViewClient,并将我的页面加载到其中。 但是我收到“网页不可用”错误。

这是我的Activity代码:

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

欢迎任何帮助,感谢。


你能贴出你的Logcat信息吗? - King of Masses
可能是重复的问题:如何从Android资产文件夹中读取HTML内容 - Suhaib
5个回答

9

如果您的结构应该像这样:

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

那么只需使用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">

7
尝试使用以下代码加载HTML:

请尝试使用以下代码来加载HTML

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

代替

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

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", "");

1
这段代码正在运行。
public class WebActivity extends Activity {
  WebView wv;

 String url="file:///android_asset/sample.html";

 @Override
 protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_web);
    wv=(WebView)findViewById(R.id.webUrl_WEB);



WebSettings webSettings = wv.getSettings();
    wv.getSettings().setLoadWithOverviewMode(true);
    wv.getSettings().setUseWideViewPort(true);
    wv.getSettings().setBuiltInZoomControls(true);
    wv.getSettings().setPluginState(PluginState.ON);


    wv.setWebViewClient(new myWebClient());

    wv.loadUrl(url);
}




public class myWebClient extends WebViewClient {
    @Override
    public void onPageStarted(WebView view, String url, Bitmap favicon) {
        // TODO Auto-generated method stub
        super.onPageStarted(view, url, favicon);
    }

    @Override
    public boolean shouldOverrideUrlLoading(WebView view, String url) {
        // TODO Auto-generated method stub

        view.loadUrl(url);
        return true;

    }
}

您需要在AndroidManifest.xml文件中具有访问互联网的权限:

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

你需要将sample.html文件放置在asset文件夹中。

谢谢您,但我已经在我的清单文件中设置了互联网权限。 - saloua

0

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

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 提供, 点击上面的
可以查看英文原文,
原文链接