java.io.IOException: grpc 失败
java.io.IOException: grpc failed
当我调用 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();
}
}
控制台输出错误:
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)
Android SDK版本(API级别):25
Android Studio 插件是最新的。
提前致谢!
编辑:
问题现在似乎已经解决了,这是我的
可能您仅在 genymotion 和 android studio 模拟器中遇到此问题。我在 genymotion 和 android studio 模拟器上遇到了同样的问题,然后我在 android 真实设备中检查了它。它对我很有用。你在真机上查看了吗?
更新:
问题好像解决了。我不确定问题是否出在我这边,所以如果您在此 post 之前遇到过这个问题,请重新 运行 您的应用程序,看看它现在是否有效。
如果它仍然不起作用,这里是我自己做的 "might" 使它起作用的东西:
- 我卸载并删除了与 Android Studio 相关的所有文件。 (不是 项目文件)。
- 然后我重新安装了 Android Studio,并重新打开项目备份。
- 当 运行 启动应用程序时(我正在使用 Android Studio 的内置模拟器)我使用了不同的虚拟设备和设备 API。这次我 运行 它在 Pixel 上,API 23,x86_64。
我在 Android 4.4.2 设备上多次遇到这个问题。对我来说,解决办法就是重启手机。没有代码更新没有 Android studio 卸载。
我终于通过对 25 版 SDK、构建工具和 API 模拟器使用以下配置来实现它。
android {
compileSdkVersion 25
buildToolsVersion "25.0.3"
defaultConfig {
applicationId "com.example..."
minSdkVersion 15
targetSdkVersion 25
同时使用 Google API 版本 11.0.2.
今天 (2017-09-16) 我的 Android Studio (2.3.3) 更新了 Google Play 服务 到 修订版 44。问题后来得到解决。我这边没有更改代码或设置。
在我的例子中,我刚刚打开(已授予权限)来自应用权限设置的位置。
安装了 Oreo 的三星 S7 Edge phone 也出现了这种情况。
它只发生在我打开飞行模式时(并不总是 - 意味着某些东西可能在某些时候被缓存了)。我没有探索 Geocoder 的内部结构,但我认为它需要某种连接才能获取信息(这也可以解释为什么这种情况在模拟器上经常发生)。
对我来说,解决方案是检查网络连接状态并仅在 status != NETWORK_STATUS_NOT_CONNECTED
.
时调用它
为此,您可以实现一个广播接收器,它将监听网络上的任何状态变化。
注册接收者
IntentFilter networkFilter = new IntentFilter();
networkFilter.addAction("android.net.conn.CONNECTIVITY_CHANGE");
getActivity().registerReceiver(NetworkChangeReceiver, networkFilter);
设置广播接收器来处理广播
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
}
}
};
如 Google 所写,您不应在 UI 线程上调用此方法
https://developer.android.com/training/location/display-address#java
我在新 Thread
中通过 运行 这个操作修复了这个问题,然后如果我需要更新一些 UI 视图,我会在 runOnUiThread
如果将 Geocoder 作为单例引入应用程序而不是每次都创建它,它对我有用。确保从工作线程调用 Geocoder.getFromLocationName()。
例如:
class Application {
private val geoCoder = Geocoder(context, Locale.getDefault())
...
}
class SomeClass {
@WorkerThread
fun doSmth(){
application.geoCoder.getFromLocationName("London", 10)
...
}
}
我认为这取决于设备的位置。因为 google 地图有时在某些地区无法正常工作。我来自伊朗,我在真实设备和模拟器上也遇到过这个问题。解决这个问题一段时间后,我使用了一个 vpn 应用程序,它可以在真实设备和模拟器上运行。因为 vpn 应用程序更改了我的 ip 地址。
虽然这个问题已经很晚了,但这里是 Kotlin 用户的答案。
我在使用 Geocoder 的 getFromLocation
函数时偶然发现了这个 java.io.IOException: grpc failed
错误。我一直在使用 Google Pixel 2 作为我的测试设备 (运行 Android 9)。
有 3 件事需要确定:
- 正如许多人在这里(以及 Android 文档 here 中指出的那样,任何与
Geocoder
相关的事情都需要 分开 从你的应用程序的主线程。
为了支持我的说法,这里引用 Android 文档:"The method is synchronous and may take a long time to do its work, so you should not call it from the main, user interface (UI) thread of your app."
现在,最好使用IntentService
来完成这个任务,就像官方文档中给出的例子一样。但是,this person tried it with an AsyncTask in Java and it worked just fine (note that their task with geocoder
was a lot less intensive). Therefore, I highly recommend using Anko's doAsync
方法并在其中实现有关 Geocoder
的任何代码。
如果可能,请使用物理设备而不是模拟器。 Android Studio 上的模拟器给我带来了很多麻烦,并且没有给我真正调试问题所需的错误信息。
在您的物理设备上重新安装您的应用程序并多次使您的项目无效Caches/Restart。
还要确保您的网络连接良好并且已在您的设备上启用。
攻略!将设备 Gps 的精度 模式更改为(仅 gps) 其他选项的瞬间,然后尝试......
对我有用settings are like this , i am postie you can also find them on emulators
我在使用 geocoder.getFromLocation() 方法获取地址列表时遇到了这个问题,问题是从纬度、经度获取地址列表需要时间,或者在一些慢速设备上需要更多时间,而且有时它给我 java-io-ioexception-grpc-failed.
我使用 Rx Java 解决了这个问题。
public class AsyncGeocoder {
private final Geocoder geocoder;
public AsyncGeocoder(Context context) {
geocoder = new Geocoder(context);
}
public Disposable reverseGeocode(double lat, double lng, Callback callback) {
return Observable.fromCallable(() -> {
try {
return geocoder.getFromLocation(lat, lng, 1);
} catch (Exception e) {
AppLogger.d("throwable,", new Gson().toJson(e));
e.printStackTrace();
}
return false;
}).subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(result -> {
//Use result for something
AppLogger.d("throwable,", new Gson().toJson(result));
callback.success((Address) ((ArrayList) result).get(0));
}, throwable -> AppLogger.d("throwable,", new Gson().toJson(throwable)));
}
public interface Callback {
void success(Address address);
void failure(Throwable e);
}
}
跟注位置
mViewModel.getLocation(asyncGeocoder, getLat(), getLng(), this);
ViewModel 方法
public void getLocation(AsyncGeocoder geocoder, Double lat, Double lng, AsyncGeocoder.Callback callback) {
getCompositeDisposable().add(geocoder.reverseGeocode(lat, lng, callback));
}
这个问题已经被报告过,你可以找到其他讨论它的堆栈帖子。 Here 是对 google 问题的评论,该问题涉及地理编码器崩溃的一些不同方式。我建议您用 try 和 catch 包围您的代码部分,这样您的应用程序就不会停止。
截至 2019 年 8 月,当我使用代理窥探自己的 http 流量时,我仍然会不时收到此消息。关掉它,问题就解决了。
有时当纬度和经度包含小数点后三位以上时,Geocoder 会失败,或者说 Geocoder 无法解码每个纬度和经度。您需要将纬度和经度限制为小数点后 3 位。完整代码
DecimalFormat df = new DecimalFormat();
df.setMaximumFractionDigits(3);
double lat = Double.parseDouble(df.format(currentUserLocation.latitude));
double lon =
Double.parseDouble(df.format(currentUserLocation.longitude));
Geocoder geocoder = new Geocoder(myContext, Locale.getDefault());
List<Address> addresses = geocoder.getFromLocation(lat,lon, 1);
String cityName = addresses.get(0).getLocality();
当我的真实设备没有互联网连接时,我可以重现这个问题(java.io.IOException:grpc 失败)。
Wifi 连接正常,但 3g 或 4g 连接失败。
使用代理
根据我的经验,我可以说这个错误是由 Geocoder
的 getFromLocation()
方法引发的。所以不要做以下事情:
- 不要在主线程上调用此方法。这将冻结 UI 并且如果任何依赖于此方法结果的东西都会崩溃。处理这个案子。
- 当没有互联网连接时,将再次抛出
IOExeption
。同样,任何依赖于此方法结果的东西都会崩溃。处理这个案子。
我遇到了同样的问题,不知道问题出在哪里。完全...直到最近,当我配置代理时,我才开始注意到这个问题出现在真实设备上。当我在 MAC 上使用 charles 时没有问题,但是当我开始在 Linux 上使用 MITM 时,这个问题每次都会出现,无一例外。可能需要额外配置 MITM。但最重要的是,如果您关闭代理,应该没问题。
所以可能会调查一下。
我似乎已经通过打开 phone 的顶部工具栏并在 wifi 和网络之间切换来解决这个问题,我猜所有虚拟设备上的操作内存都设置为 2GB RAM 并且查找位置是因此,只是用得太多,我看到帧跳转和无法搜索的位置。因此,如果它正在删除此错误,只需从 Wifi 切换到网络并向后切换。
这个问题出现在我身上(即使我在后台线程上发出请求),但仅在 Android Studio 模拟器中出现。一个奇怪的解决方法是 打开然后关闭飞行模式!
经过一些研究找出如何解决这个问题,在我的例子中,所有方法,如将代码放入新的 Thread
或使用 GeocodingApi
都不起作用,我只是确保
play-services-base
和
play-services-location
具有如下相同的版本:
implementation 'com.google.android.gms:play-services-base:17.1.0'
implementation 'com.google.android.gms:play-services-location:17.1.0'
就我而言,我删除了 AVD 并重新安装,一切正常。
嗨,我在返回到较旧的 project/test phone.
后遇到“grpc 失败”错误
我的代码调用了 getFromLocation() 方法,但失败了。阅读和玩了几个小时,我想我会检查 google 地图是否可用,它在空白地图上显示我的位置,wifi 已关闭,所以我打开 WIFI,地图工作正常。
重新测试了应用程序,瞧,我的 getFromLocation() 方法正在运行,所以一定是定位服务区域有粘性的东西....
List<Address> addresses = geocoder.getFromLocation(lat,lon, 1);
地址大小通常为 0。这可能是由于未能达到峰值地址所致,因此可以选择将它们标记为“未知”或“默认”
当搜索词为空时,我遇到了同样的错误。一旦我确定它不为空,错误就消失了。
通过搜索词,我指的是 getFromLocationName
方法的第一个参数。
当我调用 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();
}
}
控制台输出错误:
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)
Android SDK版本(API级别):25
Android Studio 插件是最新的。
提前致谢!
编辑:
问题现在似乎已经解决了,这是我的
可能您仅在 genymotion 和 android studio 模拟器中遇到此问题。我在 genymotion 和 android studio 模拟器上遇到了同样的问题,然后我在 android 真实设备中检查了它。它对我很有用。你在真机上查看了吗?
更新:
问题好像解决了。我不确定问题是否出在我这边,所以如果您在此 post 之前遇到过这个问题,请重新 运行 您的应用程序,看看它现在是否有效。
如果它仍然不起作用,这里是我自己做的 "might" 使它起作用的东西:
- 我卸载并删除了与 Android Studio 相关的所有文件。 (不是 项目文件)。
- 然后我重新安装了 Android Studio,并重新打开项目备份。
- 当 运行 启动应用程序时(我正在使用 Android Studio 的内置模拟器)我使用了不同的虚拟设备和设备 API。这次我 运行 它在 Pixel 上,API 23,x86_64。
我在 Android 4.4.2 设备上多次遇到这个问题。对我来说,解决办法就是重启手机。没有代码更新没有 Android studio 卸载。
我终于通过对 25 版 SDK、构建工具和 API 模拟器使用以下配置来实现它。
android {
compileSdkVersion 25
buildToolsVersion "25.0.3"
defaultConfig {
applicationId "com.example..."
minSdkVersion 15
targetSdkVersion 25
同时使用 Google API 版本 11.0.2.
今天 (2017-09-16) 我的 Android Studio (2.3.3) 更新了 Google Play 服务 到 修订版 44。问题后来得到解决。我这边没有更改代码或设置。
在我的例子中,我刚刚打开(已授予权限)来自应用权限设置的位置。
安装了 Oreo 的三星 S7 Edge phone 也出现了这种情况。
它只发生在我打开飞行模式时(并不总是 - 意味着某些东西可能在某些时候被缓存了)。我没有探索 Geocoder 的内部结构,但我认为它需要某种连接才能获取信息(这也可以解释为什么这种情况在模拟器上经常发生)。
对我来说,解决方案是检查网络连接状态并仅在 status != NETWORK_STATUS_NOT_CONNECTED
.
为此,您可以实现一个广播接收器,它将监听网络上的任何状态变化。
注册接收者
IntentFilter networkFilter = new IntentFilter();
networkFilter.addAction("android.net.conn.CONNECTIVITY_CHANGE");
getActivity().registerReceiver(NetworkChangeReceiver, networkFilter);
设置广播接收器来处理广播
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
}
}
};
如 Google 所写,您不应在 UI 线程上调用此方法
https://developer.android.com/training/location/display-address#java
我在新 Thread
中通过 运行 这个操作修复了这个问题,然后如果我需要更新一些 UI 视图,我会在 runOnUiThread
如果将 Geocoder 作为单例引入应用程序而不是每次都创建它,它对我有用。确保从工作线程调用 Geocoder.getFromLocationName()。
例如:
class Application {
private val geoCoder = Geocoder(context, Locale.getDefault())
...
}
class SomeClass {
@WorkerThread
fun doSmth(){
application.geoCoder.getFromLocationName("London", 10)
...
}
}
我认为这取决于设备的位置。因为 google 地图有时在某些地区无法正常工作。我来自伊朗,我在真实设备和模拟器上也遇到过这个问题。解决这个问题一段时间后,我使用了一个 vpn 应用程序,它可以在真实设备和模拟器上运行。因为 vpn 应用程序更改了我的 ip 地址。
虽然这个问题已经很晚了,但这里是 Kotlin 用户的答案。
我在使用 Geocoder 的 getFromLocation
函数时偶然发现了这个 java.io.IOException: grpc failed
错误。我一直在使用 Google Pixel 2 作为我的测试设备 (运行 Android 9)。
有 3 件事需要确定:
- 正如许多人在这里(以及 Android 文档 here 中指出的那样,任何与
Geocoder
相关的事情都需要 分开 从你的应用程序的主线程。 为了支持我的说法,这里引用 Android 文档:"The method is synchronous and may take a long time to do its work, so you should not call it from the main, user interface (UI) thread of your app."
现在,最好使用IntentService
来完成这个任务,就像官方文档中给出的例子一样。但是,this person tried it with an AsyncTask in Java and it worked just fine (note that their task with geocoder
was a lot less intensive). Therefore, I highly recommend using Anko's doAsync
方法并在其中实现有关 Geocoder
的任何代码。
如果可能,请使用物理设备而不是模拟器。 Android Studio 上的模拟器给我带来了很多麻烦,并且没有给我真正调试问题所需的错误信息。
在您的物理设备上重新安装您的应用程序并多次使您的项目无效Caches/Restart。
还要确保您的网络连接良好并且已在您的设备上启用。
攻略!将设备 Gps 的精度 模式更改为(仅 gps) 其他选项的瞬间,然后尝试......
对我有用settings are like this , i am postie you can also find them on emulators
我在使用 geocoder.getFromLocation() 方法获取地址列表时遇到了这个问题,问题是从纬度、经度获取地址列表需要时间,或者在一些慢速设备上需要更多时间,而且有时它给我 java-io-ioexception-grpc-failed.
我使用 Rx Java 解决了这个问题。
public class AsyncGeocoder {
private final Geocoder geocoder;
public AsyncGeocoder(Context context) {
geocoder = new Geocoder(context);
}
public Disposable reverseGeocode(double lat, double lng, Callback callback) {
return Observable.fromCallable(() -> {
try {
return geocoder.getFromLocation(lat, lng, 1);
} catch (Exception e) {
AppLogger.d("throwable,", new Gson().toJson(e));
e.printStackTrace();
}
return false;
}).subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(result -> {
//Use result for something
AppLogger.d("throwable,", new Gson().toJson(result));
callback.success((Address) ((ArrayList) result).get(0));
}, throwable -> AppLogger.d("throwable,", new Gson().toJson(throwable)));
}
public interface Callback {
void success(Address address);
void failure(Throwable e);
}
}
跟注位置
mViewModel.getLocation(asyncGeocoder, getLat(), getLng(), this);
ViewModel 方法
public void getLocation(AsyncGeocoder geocoder, Double lat, Double lng, AsyncGeocoder.Callback callback) {
getCompositeDisposable().add(geocoder.reverseGeocode(lat, lng, callback));
}
这个问题已经被报告过,你可以找到其他讨论它的堆栈帖子。 Here 是对 google 问题的评论,该问题涉及地理编码器崩溃的一些不同方式。我建议您用 try 和 catch 包围您的代码部分,这样您的应用程序就不会停止。
截至 2019 年 8 月,当我使用代理窥探自己的 http 流量时,我仍然会不时收到此消息。关掉它,问题就解决了。
有时当纬度和经度包含小数点后三位以上时,Geocoder 会失败,或者说 Geocoder 无法解码每个纬度和经度。您需要将纬度和经度限制为小数点后 3 位。完整代码
DecimalFormat df = new DecimalFormat();
df.setMaximumFractionDigits(3);
double lat = Double.parseDouble(df.format(currentUserLocation.latitude));
double lon =
Double.parseDouble(df.format(currentUserLocation.longitude));
Geocoder geocoder = new Geocoder(myContext, Locale.getDefault());
List<Address> addresses = geocoder.getFromLocation(lat,lon, 1);
String cityName = addresses.get(0).getLocality();
当我的真实设备没有互联网连接时,我可以重现这个问题(java.io.IOException:grpc 失败)。
Wifi 连接正常,但 3g 或 4g 连接失败。
使用代理
根据我的经验,我可以说这个错误是由 Geocoder
的 getFromLocation()
方法引发的。所以不要做以下事情:
- 不要在主线程上调用此方法。这将冻结 UI 并且如果任何依赖于此方法结果的东西都会崩溃。处理这个案子。
- 当没有互联网连接时,将再次抛出
IOExeption
。同样,任何依赖于此方法结果的东西都会崩溃。处理这个案子。
我遇到了同样的问题,不知道问题出在哪里。完全...直到最近,当我配置代理时,我才开始注意到这个问题出现在真实设备上。当我在 MAC 上使用 charles 时没有问题,但是当我开始在 Linux 上使用 MITM 时,这个问题每次都会出现,无一例外。可能需要额外配置 MITM。但最重要的是,如果您关闭代理,应该没问题。
所以可能会调查一下。
我似乎已经通过打开 phone 的顶部工具栏并在 wifi 和网络之间切换来解决这个问题,我猜所有虚拟设备上的操作内存都设置为 2GB RAM 并且查找位置是因此,只是用得太多,我看到帧跳转和无法搜索的位置。因此,如果它正在删除此错误,只需从 Wifi 切换到网络并向后切换。
这个问题出现在我身上(即使我在后台线程上发出请求),但仅在 Android Studio 模拟器中出现。一个奇怪的解决方法是 打开然后关闭飞行模式!
经过一些研究找出如何解决这个问题,在我的例子中,所有方法,如将代码放入新的 Thread
或使用 GeocodingApi
都不起作用,我只是确保
play-services-base
和
play-services-location
具有如下相同的版本:
implementation 'com.google.android.gms:play-services-base:17.1.0'
implementation 'com.google.android.gms:play-services-location:17.1.0'
就我而言,我删除了 AVD 并重新安装,一切正常。
嗨,我在返回到较旧的 project/test phone.
后遇到“grpc 失败”错误我的代码调用了 getFromLocation() 方法,但失败了。阅读和玩了几个小时,我想我会检查 google 地图是否可用,它在空白地图上显示我的位置,wifi 已关闭,所以我打开 WIFI,地图工作正常。
重新测试了应用程序,瞧,我的 getFromLocation() 方法正在运行,所以一定是定位服务区域有粘性的东西....
List<Address> addresses = geocoder.getFromLocation(lat,lon, 1);
地址大小通常为 0。这可能是由于未能达到峰值地址所致,因此可以选择将它们标记为“未知”或“默认”
当搜索词为空时,我遇到了同样的错误。一旦我确定它不为空,错误就消失了。
通过搜索词,我指的是 getFromLocationName
方法的第一个参数。