在Android Studio / Gradle Android项目中,我有两个构建变体,Debug和Release(标准项目设置)。
您可以在此图片中看到我的文件夹结构:
我有一个WebView,它应该显示/ res / raw-folder中的imprint.html。 这适用于发布版本,但不是调试版本,WebView说
Couldn't load website under 'file///android_res/raw/imprint.hml
net::EE_FILE_NOT_FOUND
这让我很困惑。
我做错了什么?
答案 0 :(得分:13)
尝试删除后缀为调试模式。
另外,请确保你有的proguard规则
-keepclassmembers class **.R$* {public static <fields>;}
-keep class **.R$*
编辑: 找出问题后(调试应用程序包后缀“.debug”),尝试以这种方式加载文件:
String path = "android.resource://" + getPackageName() + "/" + R.raw.my_web_file;
Uri myFileUri = Uri.parse(path);
File file = new File(myFileUri.toString());
webview.loadUrl(file.getAbsolutePath());
第二次编辑: 如果仍然不起作用(虽然对我而言是有效的),试试这个:使用输入流将文件加载到webview。
String prompt = "";
try {
InputStream inputStream = getResources().openRawResource(R.raw.my_web_file);
byte[] buffer = new byte[inputStream.available()];
inputStream.read(buffer);
prompt = new String(buffer);
inputStream.close();
} catch (IOException e) {
e.printStackTrace();
}
webview.loadData(prompt,"text/html","utf-8");
答案 1 :(得分:2)
试试这个适合我的。
WebView webview = (WebView) findViewById(R.id.webview);
webview.loadUrl("file:///android_res/raw/filename.html");
答案 2 :(得分:2)
您可能已经意识到,原始目录不是用于直接路径访问(see docs),而是首选资源目录。
从API级别8开始,您可以尝试使用这种稍微冗长的方法,但我的成功喜忧参半:
webview.loadUrl("file:///android_res/raw/imprint.html");
或者,res路径应该使用3个斜杠和冒号,如果它不适用于Debug,可能会出现编译调试版本的问题,你应该显示/检查你的gradle文件
foreach($request->steps as $step) {
$project->steps()->create(['step' => $step]);
}
答案 3 :(得分:1)
我认为你可以使用 android_asset 文件夹而不是raw文件夹来做同样的事情。 只需将所有.html文件放入资产即可。
语法如下:
setContentView(R.layout.webview);
webView = (WebView) findViewById(R.id.webView1);
wv.loadUrl("file:///**android_asset**/xyz.html");
答案 4 :(得分:1)
我遇到了同样的问题,其背后的原因是调试风格的applicationId
不同。
基于DDsix的答案,这对我来说最有效。
它处理:
applicationId
<强>代码强>
InputStream inputStream = getResources().openRawResource(rawFileResId);
StringBuilder stringBuilder = new StringBuilder();
try {
BufferedReader reader = new BufferedReader(new InputStreamReader(inputStream));
String line;
while ((line = reader.readLine()) != null) {
stringBuilder.append(line);
}
} catch (IOException e) {
// Log Exception
} finally {
try {
inputStream.close();
} catch (IOException e) {
// Log Exception
}
}
String html = stringBuilder.toString();
webView.loadData(html, "text/html; charset=utf-8", "UTF-8");
如果您使用的是原始文件夹中的CSS,请使用loadDataWithBaseURL()
代替loadData()
mWebView.loadDataWithBaseURL("file:///android_res/raw/", html, "text/html; charset=utf-8", "UTF-8", null);
答案 5 :(得分:-2)
试试这个
WebView webview = (WebView) findViewById(R.id.webview);
webview.loadUrl("file:///android_res/raw/filename.html");