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
Art*_*tel 11
可能你只是在genymotion和android studio模拟器中遇到这个问题.我面临与genymotion和android工作室模拟器相同的问题,然后我在Android真实设备中检查它.这对我有用.你在真实的设备上检查过吗?
这也发生在我安装了奥利奥的三星 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)
Siq*_*qve -9
更新:
现在问题似乎已经解决了。我不确定问题是否出在我这边,所以如果您在这篇文章之前遇到过这个问题,请重新运行您的应用程序,看看它现在是否有效。
如果它仍然不起作用,这是我自己做的“可能”使它起作用的事情:
| 归档时间: |
|
| 查看次数: |
31836 次 |
| 最近记录: |