Android仅捕获与网络相关的异常

Android仅捕获与网络相关的异常,android,kotlin,exception,retrofit,kotlin-coroutines,Android,Kotlin,Exception,Retrofit,Kotlin Coroutines,我目前有一个已经在Play Market上使用的应用程序,但我发现了一个我目前不确定如何解决的问题 问题是我在谷歌控制台中没有收到ANR和崩溃报告。原因是我的存储库捕获所有异常,将它们传递给ViewModel,然后在屏幕上显示该异常的本地化消息 此行为的主要思想是向用户显示,如果网络请求失败,则向用户显示这是由于internet连接不良或服务器没有响应造成的 然而,最终发生的是,我捕获了所有异常,因此所有错误,甚至那些不应该显示给用户的错误,都显示在应用程序中,而不是崩溃 请帮助我了解如何将异常

我目前有一个已经在Play Market上使用的应用程序,但我发现了一个我目前不确定如何解决的问题

问题是我在谷歌控制台中没有收到ANR和崩溃报告。原因是我的存储库捕获所有异常,将它们传递给ViewModel,然后在屏幕上显示该异常的本地化消息

此行为的主要思想是向用户显示,如果网络请求失败,则向用户显示这是由于internet连接不良或服务器没有响应造成的

然而,最终发生的是,我捕获了所有异常,因此所有错误,甚至那些不应该显示给用户的错误,都显示在应用程序中,而不是崩溃

请帮助我了解如何将异常捕获限制为仅与网络相关的问题,并且所有其他问题都会导致应用程序崩溃

下面是代码示例:

suspend fun getUser() = try {
        withContext(IO) {
            if (!doesLoginInfoExist()) {
                HttpState.Failure(null)
            }
            val cookie = getCookie(userLoginInfoDao.getUserLoginInfo()!!.username, userLoginInfoDao.getUserLoginInfo()!!.password)
            val response = networkApi.getUserData(cookie)

            if (response.isSuccessful) {
                if (response.body()?.contains(LOG_IN_SUCCESS) == true) {
                    HttpState.Success(parseUser(response.body()!!, userLoginInfoDao.getUserLoginInfo()!!.password))
                } else {
                    HttpState.Failure(null)
                }
            } else {
                HttpState.UnknownError
            }
        }

    } catch (exception: Exception) {
        HttpState.NetworkError(exception)
    }

通过改型,我捕获了HTTP请求的这些异常


  • 最后一个包含HTTP错误代码。

    非常感谢。这正是我要找的。@AlphaOmega,很高兴听到它!祝你好运