Я использую логин Google и получаю исключение. Однако, похоже, что я не могу его поймать.
У меня есть следующий код:
override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
super.onActivityResult(requestCode, resultCode, data)
when (requestCode) {
RC_SIGN_IN -> {
val task = try{
GoogleSignIn.getSignedInAccountFromIntent(data)
} catch (e: ApiException) {
Log.d("EXCEPTION", e.message)
when(e.statusCode) {
12501 -> return
else -> {
e.printStackTrace()
return
}
}
}
...
Из Logcat я вижу, что ApiException
- правильное исключение для ловли :
![enter image description here](https://i.stack.imgur.com/hqNd8.png)
И это определенно тот, кого я ловлю:
![enter image description here](https://i.stack.imgur.com/7M2lA.png)
Сначала я подумал, что по какой-то причине за это может отвечать прямое назначение с val task = try...
, поэтому я изменил свой код соответствующим образом и попробовал это:
var task: Task<GoogleSignInAccount>?
try{
task = GoogleSignIn.getSignedInAccountFromIntent(data)
} catch (e: ApiException) {
Log.d("EXCEPTION", e.message)
when(e.statusCode) {
12501 -> task = null
else -> {
e.printStackTrace()
task = null
}
}
}
Тем не менее такое же поведение. Поэтому я подумал, что, может быть, - это другое выбрасываемое исключение, поэтому я добавил еще один блок catch:
var task: Task<GoogleSignInAccount>?
try{
task = GoogleSignIn.getSignedInAccountFromIntent(data)
} catch (e: ApiException) {
Log.d("EXCEPTION", e.message)
when(e.statusCode) {
12501 -> task = null
else -> {
e.printStackTrace()
task = null
}
}
} catch (e: Exception) {
Log.d("EXCEPTION", e.message)
task = null
}
Все то же поведение. Я обнаружил этот код с точками останова на каждом шаге, но он просто полностью игнорирует блок catch. Я останавливаюсь в блоке try:
![enter image description here](https://i.stack.imgur.com/jJ6pa.png)
Но если я возобновлю, следующий шаг будет за пределами моего блока try-catch.
![enter image description here](https://i.stack.imgur.com/ukdOh.png)
Может кто-нибудь объяснить такое поведение?