地理编码器grpc失败

17

最近一个月左右,地理编码程序每次都出现“grpc failed”错误,我似乎无法解决它。我查看了java.io.IOException: grpc failed,但它并没有真正解决问题。

例如代码:

Geocoder geocoder = new Geocoder(context, Locale.getDefault());
addresses = geocoder.getFromLocation(lat, lng, 1); // Here if fails with "grpc failed"

我已经有多年没变的代码,但最近在重新编译应用程序并在模拟器或实际设备上测试时,它突然停止工作。

如果我使用版本号为25的SDK和构建工具25进行编译,则它可以在版本号为25的模拟器上运行。但是,如果我尝试在版本号为24、26或任何其他SDK版本的模拟器上运行,则会出现“grpc失败”的错误。我已经尝试创建一个新的虚拟设备等,但问题仍然存在。

我不知道该如何修复它以及问题所在。

当前设置:targetSDK/compileSDK 25,build tool 25.0.3,Android Studio 2.3.3,常规模拟器。(我已经尝试其他构建工具和SDK版本,但问题仍然存在)

有什么想法吗?


可能是 [java.io.IOException: grpc failed] 的重复问题 (https://dev59.com/uVcO5IYBdhLWcg3w-V1X)。 - Simon Rolin
@SimonRolin 不是的,请看被接受的答案和下面的评论。 - Gert Arnold
5个回答

3
问题可能在于你正在主线程中尝试使用Geocoder,如果你正在使用IntentService,可以使用该URL选项在另一个进程中创建它,但你也可以随时使用Asynctask或类似的方法。

我使用一个AsyncTask,该任务在设备上运行得非常完美。但是,在模拟器上,它偶尔会出现IOException错误消息,且不是每次都出现。例如,在模拟器上只有3/5的时间能够正常工作,而在设备上则是5/5的时间都没问题。根据我的经验,这似乎绝对是一个模拟器问题。 - Ewald

1

好的,也许有些晚了,但是对于其他寻找答案的人来说,我的情况是因为网络问题。我的网络连接很差。


0

这与虚拟设备上的Google Play服务相关。解决方法是使用API25和版本7.1.1

以下是示例:

当我在Genymotion上尝试运行虚拟设备时,如果安装了Google Play服务(错误:服务不可用):

10-07 07:13:30.023 3481-3481/com.unalfaruk.mapexample I/System.out: Your Location: 65.96992333333333 -18.540028333333332
10-07 07:13:30.023 3481-3481/com.unalfaruk.mapexample W/System.err: java.io.IOException: Service not Available
10-07 07:13:30.024 3481-3481/com.unalfaruk.mapexample W/System.err:     at android.location.Geocoder.getFromLocation(Geocoder.java:136)
10-07 07:13:30.024 3481-3481/com.unalfaruk.mapexample W/System.err:     at com.unalfaruk.mapexample.MapsActivity$1.onLocationChanged(MapsActivity.java:71)
10-07 07:13:30.024 3481-3481/com.unalfaruk.mapexample W/System.err:     at android.location.LocationManager$ListenerTransport._handleMessage(LocationManager.java:297)

enter image description here

当我尝试启用Genymotion和Google Play服务时(错误:grpc失败):
10-07 07:18:56.325 2694-2694/com.unalfaruk.mapexample I/System.out: Your Location: 65.96669666666666 -15.0
10-07 07:18:57.670 2694-2694/com.unalfaruk.mapexample W/System.err: java.io.IOException: grpc failed
10-07 07:18:57.670 2694-2694/com.unalfaruk.mapexample W/System.err:     at android.location.Geocoder.getFromLocation(Geocoder.java:136)
10-07 07:18:57.670 2694-2694/com.unalfaruk.mapexample W/System.err:     at com.unalfaruk.mapexample.MapsActivity$1.onLocationChanged(MapsActivity.java:71)
10-07 07:18:57.670 2694-2694/com.unalfaruk.mapexample W/System.err:     at android.location.LocationManager$ListenerTransport._handleMessage(LocationManager.java:297)

enter image description here

当我尝试启用AVD管理器和Google Play服务时(没有错误):

10-07 14:20:14.769 3159-3159/com.unalfaruk.mapexample I/System.out: Your Location: 37.421998333333335 -122.08400000000002
10-07 14:20:15.220 3159-3159/com.unalfaruk.mapexample I/System.out: Your Adress: Address[addressLines=[0:"1600 Amphitheatre Parkway",1:"Mountain View, CA 94043",2:"USA"],feature=1600,admin=California,sub-admin=null,locality=Mountain View,thoroughfare=Amphitheatre Parkway,postalCode=94043,countryCode=US,countryName=United States,hasLatitude=true,latitude=37.422329,hasLongitude=true,longitude=-122.0843055,phone=null,url=null,extras=null]

enter image description here


你找到解决方案了吗?我在地理编码器中也遇到了grpc失败的问题。 - sanjay

0

我曾经通过添加代码来解决类似的问题

<uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/>
<uses-permission android:name="android.permission.CHANGE_WIFI_STATE"/>

到我的清单文件


0

我有解决"java.io.ioexception grpc failed"异常的方案。

代码:

try {
    Geocoder geocoder = new Geocoder(MainActivity.this, Locale.getDefault());
    List addresses = geocoder.getFromLocation(latitude, longitude, 1);
    List addresslist = addresses;
    String address = addresslist.get(0).getAddressLine(0);
    Log.d("add", address);
} catch (IOException e) {
    e.printStackTrace();
} 

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接