我正在尝试在我的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" />
欢迎任何帮助。 谢谢。
答案 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();
}
}
});
}
}
谢谢!