Geocoder.getFromLocation grpc 在 Android 真实设备上失败
Geocoder.getFromLocation grpc failed on Android real device
我需要从纬度和经度获取城市和州。 Geocoder 执行此功能以获取城市和州。但是我仅在 Android 真实设备 上的下行中收到错误 java.io.IOException: grpc failed
。它在 模拟器 .
中运行良好
new Geocoder(context).getFromLocation(latLng.latitude, latLng.longitude, 1).get(0);
此外,我一直在使用 Asynctask 调用此函数,这是另一个 post Geocoder grpc failed 在堆栈溢出中建议的,但对我没有任何作用。
我也重启了设备,但仍然失败。
此处需要帮助。提前致谢。
注意:我在 Google Pixel XL、Samsung S6 edge、Samsung S4 中进行了测试。
看起来这是一个持续存在的问题,已在 Google 问题跟踪器中针对真实设备和模拟器报告。可以参考以下bug:
https://issuetracker.google.com/issues/64418751
https://issuetracker.google.com/issues/64247769
很遗憾,Google还没有解决这些问题。
作为解决方法,您可以考虑使用地理编码 API 网络服务。请注意,您可以在 Github:
上找到用于 Web 服务的 Java 客户端库
https://github.com/googlemaps/google-maps-services-java
使用 Web 服务的 Java 客户端库,您可以实施反向地理编码查找,这不会给您带来您在使用本机 Android 地理编码器时遇到的错误。
客户端库的Java文档位于
https://googlemaps.github.io/google-maps-services-java/v0.2.5/javadoc/
希望对您有所帮助!
检查您的互联网连接。
正在发生的事情是在搜索和结果呈现之间的某个时刻,连接要么变慢要么根本不工作。所以默认错误是没有找到 GRCP。您的代码需要处理此类错误并防止地图崩溃
我在真实设备和模拟设备上都遇到过。解决了我在清理项目后重新启动应用程序的问题
对我来说,是设备时间。我正在做一些测试,我不得不更改设备时间。必须正确设置设备时间,否则会出现此错误。
建议通过地理编码器调用以通过 IntentService 获取地址...但是如果您处于快速开发模式并且不想费心设置服务然而,您可以使用 try/catch 块
Kotlin 中的示例:
try{
val addressList = geocoder.getFromLocationName(locationName, 3)
//...
}catch(e: IOException) {
when{
e.message == "grpc failed" -> {/* display a Toast or Snackbar instead*/ }
else -> throw e
}
}
我所做的是,我将精度更改为仅 GPS,在这种情况下,应用程序不会计算我的位置。我再次将精度更改为高精度,应用程序开始运行,完全没有崩溃。您可以通过 android 手机上的位置设置更改 GPS 精度。
这是 Android 中报告的错误,请查看 @xomena 对 link 的回答。
或者,您可以使用网络服务。将此添加到 gradle 依赖项:
api 'com.google.maps:google-maps-services:0.10.2'
获取地址的示例代码:
val geoApiCtx = GeoApiContext.Builder()
.apiKey(Util.readGoogleApiKey(ctx))
.build()
val addresses = GeocodingApi.reverseGeocode(geoApiCtx, loc).await()
当我 运行 使用模拟器时,我遇到了同样的问题。
运行使用真机后问题解决
使用模拟器。我必须更新设备上的 Google Play 服务,然后它就可以工作了!
我需要从纬度和经度获取城市和州。 Geocoder 执行此功能以获取城市和州。但是我仅在 Android 真实设备 上的下行中收到错误 java.io.IOException: grpc failed
。它在 模拟器 .
new Geocoder(context).getFromLocation(latLng.latitude, latLng.longitude, 1).get(0);
此外,我一直在使用 Asynctask 调用此函数,这是另一个 post Geocoder grpc failed 在堆栈溢出中建议的,但对我没有任何作用。
我也重启了设备,但仍然失败。
此处需要帮助。提前致谢。
注意:我在 Google Pixel XL、Samsung S6 edge、Samsung S4 中进行了测试。
看起来这是一个持续存在的问题,已在 Google 问题跟踪器中针对真实设备和模拟器报告。可以参考以下bug:
https://issuetracker.google.com/issues/64418751
https://issuetracker.google.com/issues/64247769
很遗憾,Google还没有解决这些问题。
作为解决方法,您可以考虑使用地理编码 API 网络服务。请注意,您可以在 Github:
上找到用于 Web 服务的 Java 客户端库https://github.com/googlemaps/google-maps-services-java
使用 Web 服务的 Java 客户端库,您可以实施反向地理编码查找,这不会给您带来您在使用本机 Android 地理编码器时遇到的错误。
客户端库的Java文档位于
https://googlemaps.github.io/google-maps-services-java/v0.2.5/javadoc/
希望对您有所帮助!
检查您的互联网连接。 正在发生的事情是在搜索和结果呈现之间的某个时刻,连接要么变慢要么根本不工作。所以默认错误是没有找到 GRCP。您的代码需要处理此类错误并防止地图崩溃
我在真实设备和模拟设备上都遇到过。解决了我在清理项目后重新启动应用程序的问题
对我来说,是设备时间。我正在做一些测试,我不得不更改设备时间。必须正确设置设备时间,否则会出现此错误。
建议通过地理编码器调用以通过 IntentService 获取地址...但是如果您处于快速开发模式并且不想费心设置服务然而,您可以使用 try/catch 块
Kotlin 中的示例:
try{
val addressList = geocoder.getFromLocationName(locationName, 3)
//...
}catch(e: IOException) {
when{
e.message == "grpc failed" -> {/* display a Toast or Snackbar instead*/ }
else -> throw e
}
}
我所做的是,我将精度更改为仅 GPS,在这种情况下,应用程序不会计算我的位置。我再次将精度更改为高精度,应用程序开始运行,完全没有崩溃。您可以通过 android 手机上的位置设置更改 GPS 精度。
这是 Android 中报告的错误,请查看 @xomena 对 link 的回答。
或者,您可以使用网络服务。将此添加到 gradle 依赖项:
api 'com.google.maps:google-maps-services:0.10.2'
获取地址的示例代码:
val geoApiCtx = GeoApiContext.Builder()
.apiKey(Util.readGoogleApiKey(ctx))
.build()
val addresses = GeocodingApi.reverseGeocode(geoApiCtx, loc).await()
当我 运行 使用模拟器时,我遇到了同样的问题。 运行使用真机后问题解决
使用模拟器。我必须更新设备上的 Google Play 服务,然后它就可以工作了!