使用 Android Studio 将 html 文件从资产文件夹加载到 android 上的网络视图
Loading html file to webview on android from assets folder using Android Studio
我正在使用 Android Studio/Gradle。
app\src\main\android_asset 文件夹中有名为 chart.html..
的文件
我正在尝试将此文件加载到我的网络视图中,如下所示:
WebView view = new WebView(this);
view.getSettings().setJavaScriptEnabled(true);
view.loadUrl("file:///android_asset/chart.html");
setContentView(view);
但我总是收到错误消息:无法加载,因为 ERR_FILE_NOT_FOUND。
我在这里错过了什么?
目录名称应该是 assets 而不是 android_assets
这样做:
如上图所示,只需右键单击您的 app->New->Folder->Assets Folder
现在将您的 .html 文件放在 assets 文件夹中。
就是这样。完成。
其余代码与您所做的相同。
WebView view = new WebView(this);
view.getSettings().setJavaScriptEnabled(true);
view.loadUrl("file:///android_asset/hello.html");
setContentView(view);
类似问题:
我使用了很多具有不同 applicationId 的 productFlavors。
如果我尝试从 res/raw/file.html 加载 html 文件,我会得到一个 ClassNotFoundException 没有找到 class "product.flavor.package.R$raw"
R.java 文件具有不同的程序包名称。
您似乎无法从如下文件中加载 URL:
webView.loadUrl("file:///android_res/raw/page.html");
因为 WebView 尝试使用具有不同包名称的 R.class 文件。
我假设从资产中加载 html 文件的 ERR_FILE_NOT_FOUND 有同样的问题,但您没有看到异常。
( webView.loadUrl( "file:///android_assets/page.html" ); )
通过这个小变通,我解决了我的问题:
try {
AssetManager assetManager = context.getAssets();
InputStream stream = assetManager.open("page.html");
BufferedReader r = new BufferedReader(new InputStreamReader(stream));
StringBuilder total = new StringBuilder();
String line;
while ((line = r.readLine()) != null) {
total.append(line).append("\n");
}
webView.loadDataWithBaseURL(null, total.toString(), "text/html", "UTF-8", null);
} catch (Exception xxx) {
Log.e(TAG, "Load assets/page.html", xxx);
}
希望对您有所帮助。
斯蒂芬
来自 Gugelhupf 的答案,但使用原始资源。
此解决方案的优势:您可以继续进行翻译!
WebView webView = findViewById(R.id.about_text);
try {
InputStream inputStream = getResources().openRawResource(R.raw.about);
BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(inputStream));
StringBuilder stringBuilder = new StringBuilder();
String line;
while ((line = bufferedReader.readLine()) != null) {
stringBuilder.append(line).append("\n");
}
webView.loadDataWithBaseURL(null, stringBuilder.toString(), "text/html", "UTF-8", null);
} catch (IOException e) {
e.printStackTrace();
}
我正在使用 Android Studio/Gradle。
app\src\main\android_asset 文件夹中有名为 chart.html..
的文件我正在尝试将此文件加载到我的网络视图中,如下所示:
WebView view = new WebView(this);
view.getSettings().setJavaScriptEnabled(true);
view.loadUrl("file:///android_asset/chart.html");
setContentView(view);
但我总是收到错误消息:无法加载,因为 ERR_FILE_NOT_FOUND。
我在这里错过了什么?
目录名称应该是 assets 而不是 android_assets
这样做:
如上图所示,只需右键单击您的 app->New->Folder->Assets Folder
现在将您的 .html 文件放在 assets 文件夹中。
就是这样。完成。
其余代码与您所做的相同。
WebView view = new WebView(this);
view.getSettings().setJavaScriptEnabled(true);
view.loadUrl("file:///android_asset/hello.html");
setContentView(view);
类似问题:
我使用了很多具有不同 applicationId 的 productFlavors。
如果我尝试从 res/raw/file.html 加载 html 文件,我会得到一个 ClassNotFoundException 没有找到 class "product.flavor.package.R$raw"
R.java 文件具有不同的程序包名称。
您似乎无法从如下文件中加载 URL: webView.loadUrl("file:///android_res/raw/page.html"); 因为 WebView 尝试使用具有不同包名称的 R.class 文件。
我假设从资产中加载 html 文件的 ERR_FILE_NOT_FOUND 有同样的问题,但您没有看到异常。 ( webView.loadUrl( "file:///android_assets/page.html" ); )
通过这个小变通,我解决了我的问题:
try {
AssetManager assetManager = context.getAssets();
InputStream stream = assetManager.open("page.html");
BufferedReader r = new BufferedReader(new InputStreamReader(stream));
StringBuilder total = new StringBuilder();
String line;
while ((line = r.readLine()) != null) {
total.append(line).append("\n");
}
webView.loadDataWithBaseURL(null, total.toString(), "text/html", "UTF-8", null);
} catch (Exception xxx) {
Log.e(TAG, "Load assets/page.html", xxx);
}
希望对您有所帮助。 斯蒂芬
来自 Gugelhupf 的答案,但使用原始资源。
此解决方案的优势:您可以继续进行翻译!
WebView webView = findViewById(R.id.about_text);
try {
InputStream inputStream = getResources().openRawResource(R.raw.about);
BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(inputStream));
StringBuilder stringBuilder = new StringBuilder();
String line;
while ((line = bufferedReader.readLine()) != null) {
stringBuilder.append(line).append("\n");
}
webView.loadDataWithBaseURL(null, stringBuilder.toString(), "text/html", "UTF-8", null);
} catch (IOException e) {
e.printStackTrace();
}