You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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:

  1. 删除Activity中多余的onReceivedSslError方法
  2. 将两个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);
}

验证步骤

  1. 先添加网络权限,重新编译运行,测试请求google.com是否正常
  2. 若服务器为HTTP协议,再添加明文流量配置
  3. 确认WebViewClient逻辑合并后,SSL错误处理生效

内容的提问来源于stack exchange,提问作者Lennard K

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.03 20:55:30