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

Android Pie版本App显示无网络连接问题求助

Android Pie专属网络连接问题排查方案

我来帮你解决这个只在Android Pie(API 28)上出现的网络异常问题,结合你提供的代码和已经尝试过的方案,咱们一步步定位并解决:

第一步:先抓准真实错误原因(最关键!)

你现在在onFailure里直接提示「无网络连接」,但Throwable对象里藏着真正的错误细节——可能是SSL握手失败、TLS版本不兼容、域名解析失败,而非真的没网。先修改onFailure代码,打印详细错误日志:

@Override
public void onFailure(Call<LoginModel> call, Throwable t) {
    mProgressBar.setVisibility(View.GONE);
    if (LoginActivity.this != null) {
        // 打印完整错误栈,这是定位问题的核心
        Log.e("LoginError", "登录失败详情: ", t);
        // 先显示真实错误信息,而非笼统的无网络提示
        String errorMsg = t.getMessage() != null ? t.getMessage() : "No Internet Connection";
        Utility.getInstance(LoginActivity.this).showSnackBarLong(errorMsg, mLoginActivity);
        return;
    }
}

运行后查看Logcat的LoginError标签,就能知道到底是哪一步出了问题。

针对Android Pie的常见解决方案

根据Pie版本的网络特性,结合你已经尝试的配置,给出以下针对性方案:

1. 修复TLS版本兼容性问题

Android Pie默认强制要求TLS 1.2及以上,如果你的服务器仅支持TLS 1.0/1.1,就会触发连接失败。可以通过OkHttp配置兼容老版本TLS:

// 在ApiClient中添加OkHttp的TLS兼容配置
public static OkHttpClient getCompatibleOkHttpClient() {
    try {
        SSLContext sslContext = SSLContext.getInstance("TLSv1.2");
        sslContext.init(null, null, new SecureRandom());

        ConnectionSpec connectionSpec = new ConnectionSpec.Builder(ConnectionSpec.MODERN_TLS)
                .tlsVersions(TlsVersion.TLS_1_0, TlsVersion.TLS_1_1, TlsVersion.TLS_1_2)
                .build();

        return new OkHttpClient.Builder()
                .sslSocketFactory(sslContext.getSocketFactory(), new X509TrustManager() {
                    @Override
                    public void checkClientTrusted(X509Certificate[] chain, String authType) {}
                    @Override
                    public void checkServerTrusted(X509Certificate[] chain, String authType) {}
                    @Override
                    public X509Certificate[] getAcceptedIssuers() {return new X509Certificate[0];}
                })
                .connectionSpecs(Collections.singletonList(connectionSpec))
                .build();
    } catch (Exception e) {
        throw new RuntimeException(e);
    }
}

然后在Retrofit初始化时使用这个客户端:

Retrofit retrofit = new Retrofit.Builder()
        .baseUrl(BASE_URL)
        .client(getCompatibleOkHttpClient())
        .addConverterFactory(GsonConverterFactory.create())
        .build();

2. 确保Network Security Config配置正确

你已经添加了networkSecurityConfig,但可能配置有误。重新检查res/xml/network_security_config.xml:

<?xml version="1.0" encoding="utf-8"?>
<network-security-config>
    <!-- 全局允许明文HTTP请求(如果你的API是HTTP的话) -->
    <base-config cleartextTrafficPermitted="true">
        <trust-anchors>
            <certificates src="system" />
        </trust-anchors>
    </base-config>
    <!-- 也可以针对特定域名单独配置,更安全 -->
    <!--
    <domain-config cleartextTrafficPermitted="true">
        <domain includeSubdomains="true">你的API域名</domain>
    </domain-config>
    -->
</network-security-config>

同时在AndroidManifest.xml的application标签中确保两个配置都存在:

<application
    ...
    android:usesCleartextTraffic="true"
    android:networkSecurityConfig="@xml/network_security_config">

3. 检查OkHttp/Retrofit版本兼容性

旧版本的OkHttp在Android Pie上可能存在适配问题,建议升级到最新稳定版:

// build.gradle(app)中更新依赖
implementation 'com.squareup.okhttp3:okhttp:4.12.0'
implementation 'com.squareup.retrofit2:retrofit:2.9.0'
implementation 'com.squareup.retrofit2:converter-gson:2.9.0'

4. 排查后台网络限制

Android Pie对后台应用的网络访问有更严格的限制,比如电池优化可能导致网络被禁用。可以引导用户关闭应用的电池优化:

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
    PowerManager powerManager = (PowerManager) getSystemService(Context.POWER_SERVICE);
    boolean isIgnoringOptimizations = powerManager.isIgnoringBatteryOptimizations(getPackageName());
    if (!isIgnoringOptimizations) {
        Intent intent = new Intent(Settings.ACTION_REQUEST_IGNORE_BATTERY_OPTIMIZATIONS);
        intent.setData(Uri.parse("package:" + getPackageName()));
        startActivity(intent);
    }
}

总结

先通过打印onFailure的完整错误栈定位具体问题,再对应上面的方案解决:

  • 如果日志显示SSLHandshakeException → 优先处理TLS兼容
  • 如果显示UnknownHostException → 检查域名解析或DNS配置
  • 如果显示ConnectException → 检查网络权限或后台限制

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.13 08:09:58