Android真实设备上的Geocoder.getFromLocation grpc失败

问题描述 投票:6回答:4

我需要从纬度和经度获得城市和州。 Geocoder执行此功能以获得城市和州。但我只在Android真实设备上收到错误java.io.IOException: grpc failed在下面的行。它在模拟器中运行良好。

new Geocoder(context).getFromLocation(latLng.latitude, latLng.longitude, 1).get(0);

此外,我一直在使用Asynctask调用此函数,这是在堆栈溢出的另一篇文章Geocoder grpc failed中建议的,但对我来说没有任何作用。

我也重启了设备但仍然失败了。

需要帮助。提前致谢。

注意:我测试了Google Pixel XL,三星S6边缘,三星S4。

android google-maps latitude-longitude android-location google-geocoder
4个回答
9
投票

看起来这是Google问题跟踪器中针对真实设备和模拟器报告的持续问题。您可以参考以下错误:

https://issuetracker.google.com/issues/64418751

https://issuetracker.google.com/issues/64247769

不幸的是,谷歌还没有解决这些问题。

作为解决方法,您可以考虑使用Geocoding API Web服务。请注意,您可以在Github上找到用于Web服务的Java客户端库:

https://github.com/googlemaps/google-maps-services-java

使用Java客户端库进行Web服务,您可以实现反向地理编码查找,该查找不应该为您提供使用本机Android地理编码器时遇到的错误。

客户端库的Javadoc位于

https://googlemaps.github.io/google-maps-services-java/v0.2.5/javadoc/

我希望这有帮助!


7
投票

检查您的互联网连接。在搜索和结果呈现之间的某个时刻发生了什么,连接要么慢,要么根本不工作。所以默认错误是没有找到GRCP。您的代码需要处理此类错误并防止映射崩溃


0
投票

使用真实和模拟设备发生在我身上。解决了我在清理项目后重新启动应用程序的问题


0
投票
launch {
    val latlng = geocode(
        Geocoder(activity, Locale.getDefault()),
        drop.text.toString()
    )
    Log.i(TAG,latlng.toString())
}
fun geocode(geoCoder: Geocoder, locationName: String) : LatLng ?{
   val addList = geoCoder.getFromLocationName(locationName, 1)
   if(addList.isNotEmpty()){
      return LatLng(addList[0].latitude,addList[0].longitude)
   }
   return null
}

我只是把我的电话放在后台线程中。因为当你打电话给它时,它在内部是一个grpc调用

getFromLocationName

方法

GRPC是全局远程过程调用使用HTTP 2.0。因此,当您拥有GRPC时,它就是一个网络呼叫。所以把它放在后台有助于我。

上面的代码片段在Kotlin中并且使用了Coroutines,但你可以在Jave中使用Threads或Handlers或者我们为后台线程做的所有其他事情。

我得到了同样的错误,所以在从这篇文章中读到它们是开放的问题后,可能会认为它不起作用。但后来意识到我从主线程调用这个方法,这就是问题所在。

希望能帮助到你


0
投票

对我来说,这是设备时间。我正在做一些测试,我不得不改变设备时间。必须正确设置设备时间,否则会出现此错误。

© www.soinside.com 2019 - 2024. All rights reserved.