Android Studio WebView存在CORS问题,无法获取服务器数据
解决Android WebView中"TypeError: Failed to fetch"的问题
核心问题1:缺少网络权限
你的AndroidManifest.xml未声明网络访问权限,这是所有网络请求失败的根本原因——Android应用默认无联网权限,必须手动添加。
修改AndroidManifest.xml,在<application>标签外部添加:
<uses-permission android:name="android.permission.INTERNET" />
核心问题2:WebViewClient被重复覆盖
你先后设置了两个WebViewClient,第二个会完全覆盖第一个,导致你写的onReceivedSslError逻辑根本不会生效。同时,Activity中单独定义的onReceivedSslError方法也不会被WebView调用,属于无效代码。
修改MainActivity.java:
- 删除Activity中多余的
onReceivedSslError方法 - 将两个WebViewClient的逻辑合并为一个:
mWebView.setWebViewClient(new WebViewClient() { @Override public void onReceivedSslError(WebView view, SslErrorHandler handler, SslError error) { // 注意:仅测试环境使用,生产环境请严格验证证书合法性 handler.proceed(); } @Override public boolean shouldOverrideUrlLoading(WebView view, WebResourceRequest request) { view.loadUrl(request.getUrl().toString()); return false; } });
额外配置:处理明文流量(若服务器用HTTP协议)
从Android 9(API 28)开始,系统默认禁止明文HTTP流量。如果你的自有服务器使用HTTP而非HTTPS,需在AndroidManifest.xml的<application>标签中添加:
<application ... android:usesCleartextTraffic="true" ...>
补充WebSettings优化(可选)
添加以下配置提升网络请求兼容性:
// 启用应用缓存(按需调整) mWebView.getSettings().setAppCacheEnabled(true); // 设置缓存模式 mWebView.getSettings().setCacheMode(WebSettings.LOAD_DEFAULT); // 适配HTTPS页面加载HTTP资源的场景(仅测试用) if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { mWebView.getSettings().setMixedContentMode(WebSettings.MIXED_CONTENT_ALWAYS_ALLOW); }
验证步骤
- 先添加网络权限,重新编译运行,测试请求google.com是否正常
- 若服务器为HTTP协议,再添加明文流量配置
- 确认WebViewClient逻辑合并后,SSL错误处理生效
内容的提问来源于stack exchange,提问作者Lennard K
相关产品推荐
相关产品推荐

