Geocoder.getFromLocation grpc在Android real设备上失败

Geocoder.getFromLocation grpc在Android real设备上失败,android,google-maps,latitude-longitude,android-location,google-geocoder,Android,Google Maps,Latitude Longitude,Android Location,Google Geocoder,我需要从经纬度得到城市和州。地理编码器执行此功能以获取城市和州。但我得到一个错误java.io.IOException:grpc失败,仅在Android real device上。它在模拟器中运行良好 new Geocoder(context).getFromLocation(latLng.latitude, latLng.longitude, 1).get(0); 另外,我一直在使用Asynctask调用这个函数,这在stack overflow中的另一篇文章中有建议,但对我来说没有任何效果

我需要从经纬度得到城市和州。地理编码器执行此功能以获取城市和州。但我得到一个错误
java.io.IOException:grpc失败
,仅在Android real device上。它在模拟器中运行良好

new Geocoder(context).getFromLocation(latLng.latitude, latLng.longitude, 1).get(0);
另外,我一直在使用Asynctask调用这个函数,这在stack overflow中的另一篇文章中有建议,但对我来说没有任何效果

我也重新启动了设备,但它仍然失败

这里需要帮助。提前谢谢


注意:我在谷歌Pixel XL、三星S6 edge、三星S4上进行了测试

这似乎是一个持续存在的问题,在谷歌问题追踪器中报道了真实设备和模拟器的问题。您可以参考以下错误:

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

作为一个解决方案,您可以考虑使用地理编码API Web服务。请注意,您可以在Github上找到web服务的Java客户端库:

使用Java client library for web services,您可以实现反向地理编码查找,而不会出现本机Android geocoder所遇到的错误

客户端库的Javadoc位于


我希望这有帮助

检查您的internet连接。
在搜索和结果呈现之间的某个点上,连接要么变慢,要么根本不工作。因此,默认错误是找不到GRCP。您的代码需要处理这种类型的错误,并防止地图崩溃发生在我使用真实设备和模拟设备时。解决了我在清理项目后重新启动应用的问题

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

建议通过…调用geocoder获取地址。但是,如果您处于快速开发模式,不想麻烦设置服务,则可以使用try/catch块

科特林的例子:

试试看{
val addressList=geocoder.getFromLocationName(locationName,3)
//...
}捕获(e:IOException){
什么时候{
e、 消息==“grpc失败”->{/*改为显示Toast或Snackbar*/}
else->抛出e
}
}

我所做的是,我将精度更改为仅GPS,在这种情况下,应用程序没有计算我的位置。我再次将精度更改为高精度,应用程序开始工作,没有崩溃。您可以通过android手机上的位置设置更改GPS精度。

这是android中报告的错误,请检查@xomena answer以获取链接

或者,您可以使用web服务。将此添加到渐变依赖项:

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()

当我使用emulator运行时,我遇到了同样的问题。
使用真实设备运行后,问题已解决。

使用模拟器。我必须更新设备上的谷歌播放服务,然后它就工作了

如何做?请尝试{var connection=wait internet.CheckConnection();var Searchbar=(Searchbar)sender;/*这将防止GRCP Java失败*/如果(!connection.issucess){wait dialogService.ShowMessage(“未找到地址”,“请确保您没有脱机。”);return;}catch(ex){获取exeption…}使用Geocoder作为服务有效!更多信息请参见此处:一年半后,这两个bug的状态都是“新的”“。谢谢谷歌。哈哈…。只是把那个电话放在后台线程或协同程序中。”works@ReejeshPK您的链接不再指向正确的页面(不知道Geocoder、显示地址或任何类似的东西。你能分享你的解决方案吗?@Rule,只需在后台服务或异步任务中运行你的Geocoder,我想不建议这样做,它会给出90%的结果,所以如果你没有得到结果,请使用API:尝试使用Geocoder作为服务: