java.io.IOException:grpc失败了

Siq*_*qve 33 java android google-maps google-geocoder

当我使用call getFromLocationName时,我得到一个IOException,其描述为"grpc failed".

运行的代码

@Override
public void onMapReady(GoogleMap googleMap) {
    mMap = googleMap;
    try {
        Geocoder geocoder = new Geocoder(getApplicationContext(), Locale.getDefault());
        List<Address> listAdresses = geocoder.getFromLocationName("London", 10);
        Log.i("PlaceInfo", listAdresses.get(0).toString());
    } catch (IOException e) {
        e.printStackTrace();
    }
}
Run Code Online (Sandbox Code Playgroud)

控制台输出错误:

07-10 12:01:38.781 13712-13712/co.siqve.maplocationdemo W/System.err: java.io.IOException: grpc failed
07-10 12:01:38.781 13712-13712/co.siqve.maplocationdemo W/System.err:     at android.location.Geocoder.getFromLocationName(Geocoder.java:178)
07-10 12:01:38.781 13712-13712/co.siqve.maplocationdemo W/System.err:     at co.siqve.maplocationdemo.MapsActivity.onMapReady(MapsActivity.java:70)
07-10 12:01:38.781 13712-13712/co.siqve.maplocationdemo W/System.err:     at com.google.android.gms.maps.zzaj.zza(Unknown Source)
07-10 12:01:38.781 13712-13712/co.siqve.maplocationdemo W/System.err:     at com.google.android.gms.maps.internal.zzaq.onTransact(Unknown Source)
07-10 12:01:38.781 13712-13712/co.siqve.maplocationdemo W/System.err:     at android.os.Binder.transact(Binder.java:499)
07-10 12:01:38.781 13712-13712/co.siqve.maplocationdemo W/System.err:     at com.google.android.gms.maps.internal.aq.a(:com.google.android.gms.DynamiteModulesB:5)
07-10 12:01:38.781 13712-13712/co.siqve.maplocationdemo W/System.err:     at com.google.maps.api.android.lib6.impl.bb.run(:com.google.android.gms.DynamiteModulesB:5)
07-10 12:01:38.781 13712-13712/co.siqve.maplocationdemo W/System.err:     at android.os.Handler.handleCallback(Handler.java:751)
07-10 12:01:38.781 13712-13712/co.siqve.maplocationdemo W/System.err:     at android.os.Handler.dispatchMessage(Handler.java:95)
07-10 12:01:38.781 13712-13712/co.siqve.maplocationdemo W/System.err:     at android.os.Looper.loop(Looper.java:154)
07-10 12:01:38.781 13712-13712/co.siqve.maplocationdemo W/System.err:     at android.app.ActivityThread.main(ActivityThread.java:6119)
07-10 12:01:38.782 13712-13712/co.siqve.maplocationdemo W/System.err:     at java.lang.reflect.Method.invoke(Native Method)
07-10 12:01:38.782 13712-13712/co.siqve.maplocationdemo W/System.err:     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:886)
07-10 12:01:38.782 13712-13712/co.siqve.maplocationdemo W/System.err:     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:776)
Run Code Online (Sandbox Code Playgroud)

Android SDK版本(API级别):25

Android Studio插件是最新的.

提前致谢!

编辑:

问题似乎现在已经解决,这是我的解决方案.

Dan*_*ele 17

就像谷歌写的,你不应该在 UI 线程上调用这个方法

https://developer.android.com/training/location/display-address#java

我通过在 new 中运行此操作解决了这个问题Thread,然后如果我需要更新一些 UI 视图,我会在runOnUiThread

  • 我认为真正的问题一定是在其他地方,因为我在使用“Geocoder”时面临着相同的 grpc 问题,但是将操作移动到新线程并没有解决任何问题,它只是让我收到了同样的错误,但延迟了 10 秒。 (3认同)

vvk*_*wss 15

当我的真实设备上没有互联网连接时,我可以重现这个问题(java.io.IOException: grpc failed)。


Art*_*tel 11

可能你只是在genymotion和android studio模拟器中遇到这个问题.我面临与genymotion和android工作室模拟器相同的问题,然后我在Android真实设备中检查它.这对我有用.你在真实的设备上检查过吗?

  • 我在android真实设备中遇到此错误. (18认同)

Aam*_*fiq 8

我多次在Android 4.4.2设备上遇到此问题.对我来说,解决方案就是重启手机.没有代码更新没有Android工作室卸载.


xjc*_*jcl 8

这个问题出现在我身上(即使我在后台线程上发出请求),但仅在 Android Studio 模拟器中出现。为我修复它的一个奇怪的解决方法是打开然后关闭飞行模式!


Lub*_*gue 6

这也发生在我安装了奥利奥的三星 S7 Edge 手机上。它只发生在我打开飞行模式时(并不总是 - 意味着某些东西可能已被缓存)。我没有探索 Geocoder 的本质,但我认为它需要某种连接来获取信息(这也可以解释为什么在模拟器上经常发生这种情况)。对我来说,解决方案是检查网络连接状态并仅在status != NETWORK_STATUS_NOT_CONNECTED.

为此,您可以实现一个广播接收器,它将侦听网络上的任何状态变化。

注册接收者

IntentFilter networkFilter = new IntentFilter();
networkFilter.addAction("android.net.conn.CONNECTIVITY_CHANGE");
getActivity().registerReceiver(NetworkChangeReceiver, networkFilter);
Run Code Online (Sandbox Code Playgroud)

设置广播接收器来处理广播

private BroadcastReceiver NetworkChangeReceiver = new BroadcastReceiver() {

  @Override
  public void onReceive(final Context context, final Intent intent) {
    int status = NetworkUtil.getConnectivityStatusString(context);

    if (status == NetworkUtil.NETWORK_STATUS_NOT_CONNECTED) {
    } else {
      // do your stuff with geocoder here
    }
  }
};
Run Code Online (Sandbox Code Playgroud)


Joh*_*zén 6

截至 2019 年 8 月,当我使用代理窥探自己的 http 流量时,我仍然不时收到此信息。关闭它,问题就消失了。


Siq*_*qve -9

更新:

现在问题似乎已经解决了。我不确定问题是否出在我这边,所以如果您在这篇文章之前遇到过这个问题,请重新运行您的应用程序,看看它现在是否有效。

如果它仍然不起作用,这是我自己做的“可能”使它起作用的事情:

  1. 我卸载并删除了所有与Android Studio相关的文件。(不是项目文件)。
  2. 然后我重新安装了 Android Studio,并重新打开了该项目。
  3. 运行应用程序时(我使用的是 Android Studio 的内置模拟器),我使用了不同的虚拟设备和设备 API。这次我在 Pixel 上运行它,使用 API 23、x86_64。

  • 你有没有发现问题出在哪里?我也有同样的问题。你的解决方案工作了一天左右,之后我又回到“grpc failed”,即使我从头开始一个新项目。一直无法重新安装Android Studio。:( (14认同)