首页 > 解决方案 > 为什么我的应用程序在互联网关闭时仍然崩溃

问题描述

当互联网关闭时,我的应用程序仍然崩溃,我正在使用诸如 Retrofit 和 OkHttp 配置之类的服务模块,我已经在应用程序清单和服务模块清单上的清单上添加了这些权限,但没有任何效果。

<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />

但是 crashlytics 正在登录这些错误:

Fatal Exception: java.net.UnknownHostException: Unable to resolve host "api.com.br": No address associated with hostname

Caused by android.system.GaiException: android_getaddrinfo failed: EAI_NODATA (No address associated with hostname)

标签: androidretrofitandroid-permissionsokhttp

解决方案


您提到的权限对于让您的应用程序访问互联网、访问网络状态和访问 wifi 状态是必要的。但是,用户仍然可以根据需要打开和关闭互联网连接。

如果没有 Internet 连接,您对 api.com.br 的 DNS 查找将失败。

您可以在尝试进行任何网络呼叫之前检查互联网连接并向用户显示错误,以便他们知道打开它以使您的应用程序正常工作。

您可以在此处关注 Google 的 Android 文档,了解如何检查互联网连接。

本质上:

private boolean isNetworkConnected(Context context) {
    ConnectivityManager cm =
            (ConnectivityManager)context.getSystemService(Context.CONNECTIVITY_SERVICE);
    NetworkInfo activeNetwork = cm.getActiveNetworkInfo();
    return activeNetwork != null && activeNetwork.isConnectedOrConnecting();
}

此外,您应该计划在进行网络调用时捕获和处理任何与网络相关的异常,并使用它向用户显示有用的错误。

这是因为即使预先检查连接,在您拨打电话后仍有可能出现网络故障。不过,预检查会阻止您拨打您知道会失败的电话。


推荐阅读