如何正确处理try-catch错误



我的应用程序一直崩溃与FirebaseNetworkException每当我没有互联网连接,即使我正在处理异常,我错过了什么?:

fun getToken(): String? {
val token = StringBuilder()
val countDownLatch = CountDownLatch(1)
try {

FirebaseAuth.getInstance().currentUser?.getIdToken(false)
?.addOnCompleteListener { task ->
token.append(task.result?.token)
println(task.result?.token)
countDownLatch.countDown()
}
return try {
countDownLatch.await(30L, TimeUnit.SECONDS)
token.toString()
} catch (ie: InterruptedException) {
null
}
}
catch (exception: FirebaseNetworkException)
{
println("exception is ${exception.message.toString()}")
return null;
}
}

这个错误返回:

Caused by: com.google.firebase.FirebaseNetworkException: A network error (such as timeout, interrupted connection or unreachable host) has occurred.

Firebase提供了一个方法来判断响应是成功还是失败。参考链接。

如果Task已经成功完成返回true;虚假的否则。

if(task.isSuccessful) {}

同样,您可以使用回调方法来返回令牌,我已经使它更容易为您。在你的onCreate()

getToken { token ->
println("Your token $token")
}

用回调监听器初始化函数

fun getToken(callback: (token: String?) -> Unit) {
FirebaseAuth.getInstance().currentUser?.getIdToken(false)?.addOnCompleteListener { task ->
if (task.isSuccessful) {
callback.invoke(task.result.token)
} else
callback.invoke(null)
}
}

最新更新