gpt4 book ai didi

android - 谷歌地方 API : Runtime exception not caught

转载 作者:太空狗 更新时间:2023-10-29 13:04:30 27 4
gpt4 key购买 nike

我遇到的问题与 this question 中的问题类似.与那个问题不同的是,我有正确的设置(API key 在 Google 控制台上启用的 list 、 map 和地点 API 中指定)因为代码大多数都有效:

private fun performPlaceDetection() {
// use the Places API.
try {
val placeResult = placeDetectionClient.getCurrentPlace(null)
placeResult.addOnCompleteListener({ task ->
val likelyPlaces = task.result
for (placeLikelihood in likelyPlaces) {
Timber.d( String.format("Place '%s' has likelihood: %g",
placeLikelihood.place.name,
placeLikelihood.likelihood))
}
likelyPlaces.release()
})
} catch (e: SecurityException) {
Timber.d("error fetching current place. permissions?: " + e.message)
e.printStackTrace()
} catch (e: RuntimeExecutionException) {
Timber.d("error fetching current place: " + e.message)
e.printStackTrace()
}
}

代码偶尔会因为这个而失败:

com.google.android.gms.tasks.RuntimeExecutionException: com.google.android.gms.common.api.ApiException: 13: ERROR

或者当我关闭网络连接时,出现此错误:

com.google.android.gms.tasks.RuntimeExecutionException: com.google.android.gms.common.api.ApiException: 7: NETWORK_ERROR

让我难过的是,在任何一种情况下,都没有捕获到异常 (RunTimeExecutionException)。我知道在 Kotlin 中,所有异常都是未经检查的,但我想如果出现错误它们会被捕获。有什么线索吗?

更新:看起来在 内部 捕获异常 OnCompleteListener 有效,而没有捕获外部异常:

try {
val placeResult = placeDetectionClient.getCurrentPlace(null)
placeResult.addOnCompleteListener({ task ->
try {
val likelyPlaces = task.result
for (placeLikelihood in likelyPlaces) {
Timber.d( String.format("Place '%s' has likelihood: %g",
placeLikelihood.place.name,
placeLikelihood.likelihood))
}
likelyPlaces.release()
} catch (e: Exception) {
Timber.d("inner exception: $e")
}
})
} catch(e: Exception) {
Timber.d("outer exception: " + e::class.qualifiedName)
}

我不确定为什么会捕获到内部异常。我的猜测是,这是因为 placeDetectionClient.getCurrentPlace() 异步运行(并且错误是由 Places API 从单独的线程抛出的)但我不确定 (performPlaceDetection() 从 Android 应用程序的 MainActivity 调用)。将不胜感激对此的一些投入。

最佳答案

看起来像在 OnCompleteListener 中捕获异常有效,而在外部则没有捕获:

try {
val placeResult = placeDetectionClient.getCurrentPlace(null)
placeResult.addOnCompleteListener({ task ->
try {
val likelyPlaces = task.result
for (placeLikelihood in likelyPlaces) {
Timber.d( String.format("Place '%s' has likelihood: %g",
placeLikelihood.place.name,
placeLikelihood.likelihood))
}
likelyPlaces.release()
} catch (e: Exception) {
Timber.d("inner exception: $e")
}
})
} catch(e: Exception) {
Timber.d("outer exception: " + e::class.qualifiedName)
}

我不确定为什么会捕获到内部异常。我的猜测是,这是因为 placeDetectionClient.getCurrentPlace() 异步运行(并且错误是由 Places API 从单独的线程抛出的)但我不确定(performPlaceDetection() 是从 Android 应用程序的 MainActivity 调用的)

关于android - 谷歌地方 API : Runtime exception not caught,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50130297/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com