Android 只捕获与网络相关的异常
Android catch only Network related exceptions
我目前有一个已在 Play Market 上使用的应用程序,但我发现了一个我目前不确定如何解决的问题。
问题是我在 Google 控制台中没有收到 ANR 和崩溃报告。原因是我的存储库捕获所有异常,将它们传递给 ViewModel,然后该异常的本地化消息显示在屏幕上。
此行为的主要思想是向用户表明,如果网络请求失败,请向用户表明这是由于互联网连接不良或服务器未响应造成的。
然而,最终发生的事实是我捕获了所有异常,因此所有错误,甚至那些不应该向用户显示的错误都会显示在应用程序中,而不是使它崩溃。
请帮助我了解如何将我的异常捕获限制为仅捕获与网络相关的问题,而所有其他问题都应该使应用程序崩溃。
这是代码示例:
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)
}
使用 Retrofit,我捕获了 HTTP 请求的这些异常。
最后一个包含 HTTP 错误代码。
我目前有一个已在 Play Market 上使用的应用程序,但我发现了一个我目前不确定如何解决的问题。
问题是我在 Google 控制台中没有收到 ANR 和崩溃报告。原因是我的存储库捕获所有异常,将它们传递给 ViewModel,然后该异常的本地化消息显示在屏幕上。
此行为的主要思想是向用户表明,如果网络请求失败,请向用户表明这是由于互联网连接不良或服务器未响应造成的。
然而,最终发生的事实是我捕获了所有异常,因此所有错误,甚至那些不应该向用户显示的错误都会显示在应用程序中,而不是使它崩溃。
请帮助我了解如何将我的异常捕获限制为仅捕获与网络相关的问题,而所有其他问题都应该使应用程序崩溃。
这是代码示例:
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)
}
使用 Retrofit,我捕获了 HTTP 请求的这些异常。
最后一个包含 HTTP 错误代码。