【问题标题】:Android: grpc failed on Nexus 5Android:在 Nexus 5 上 grpc 失败
【发布时间】:2018-04-11 16:11:23
【问题描述】:

我正在与geocoder 合作。在所有设备上,代码都可以正常工作,但在 Nexus 5 手机上,日志中有异常。

我的代码:

override fun fromAddress(address: Address): Observable<Geolocation> {
    val location = geocoder.getFromLocationName("${address.street} ${address.number}, ${address.postcode}, ${address.city}", LOCATIONS_MAX_RESULTS).first()
    return Observable.just(Geolocation(latitude = location.latitude, longitude = location.longitude))
}

我的错误:

java.io.IOException: grpc failed
  at android.location.Geocoder.getFromLocationName(Geocoder.java:178)
  at nl.ah.appienow.data.address.AndroidGeocoder.fromAddress(AndroidGeocoder.kt:20)
  at nl.ah.appienow.address.ValidatePostcode$execute$1.apply(ValidatePostcode.kt:31)
  at nl.ah.appienow.address.ValidatePostcode$execute$1.apply(ValidatePostcode.kt:17)
  at io.reactivex.internal.operators.observable.ObservableFlatMap$MergeObserver.onNext(ObservableFlatMap.java:121)
  at io.reactivex.internal.operators.observable.ObservableMap$MapObserver.onNext(ObservableMap.java:64)
  at retrofit2.adapter.rxjava2.BodyObservable$BodyObserver.onNext(BodyObservable.java:51)
  at retrofit2.adapter.rxjava2.BodyObservable$BodyObserver.onNext(BodyObservable.java:37)
  at retrofit2.adapter.rxjava2.CallExecuteObservable.subscribeActual(CallExecuteObservable.java:43)
  at io.reactivex.Observable.subscribe(Observable.java:10842)
  at retrofit2.adapter.rxjava2.BodyObservable.subscribeActual(BodyObservable.java:34)
  at io.reactivex.Observable.subscribe(Observable.java:10842)
  at io.reactivex.internal.operators.observable.ObservableMap.subscribeActual(ObservableMap.java:33)
  at io.reactivex.Observable.subscribe(Observable.java:10842)
  at io.reactivex.internal.operators.observable.ObservableFlatMap.subscribeActual(ObservableFlatMap.java:55)
  at io.reactivex.Observable.subscribe(Observable.java:10842)
  at io.reactivex.internal.operators.observable.ObservableSubscribeOn$SubscribeTask.run(ObservableSubscribeOn.java:96)
  at io.reactivex.Scheduler$DisposeTask.run(Scheduler.java:452)
  at io.reactivex.internal.schedulers.ScheduledRunnable.run(ScheduledRunnable.java:61)
  at io.reactivex.internal.schedulers.ScheduledRunnable.call(ScheduledRunnable.java:52)
  at java.util.concurrent.FutureTask.run(FutureTask.java:237)
  at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:269)
  at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1113)
  at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:588)
  at java.lang.Thread.run(Thread.java:818)

我到处阅读解决方案重新安装 Android Studio 或更新 Android Studio,但这对我不起作用。

【问题讨论】:

  • 您使用的是哪个版本的播放服务? Nexus 5 运行的是哪个 Android 版本?您测试过的其他设备是否安装了相同的 Android 版本?
  • 这是日志中唯一的例外吗?没有原因异常吗?

标签: android grpc geocode


【解决方案1】:

当我从纬度和经度获取地址时,我遇到了同样的问题。我正在使用模拟器和另一个卡车屏幕设备。在这两个设备上它给出了同样的问题。 GRPC 失败。但是当我在我的手机和另一台三星设备上运行这段代码时,它运行良好。我必须在卡车屏幕设备上运行它。所以我找到了一个使用 Google Maps Location API 从纬度和经度获取位置的解决方案。

String url = "https://maps.googleapis.com/maps/api/geocode/json?latlng="+log.getLattitude()+","+log.getLongitude()+"&key="+context.getResources().getString(R.string.geocodeAPiKey);

或者干脆

String url = "https://maps.googleapis.com/maps/api/geocode/json?latlng=33.25845,75.256489&key=API_KEY;

你可以像Reverse Geocoding

这样搜索

通过此链接,您可以获得 API Key 用于地理编码

https://developers.google.com/maps/documentation/geocoding/get-api-key

在结果中你会得到一个 JSONObject。获取它在 JSONArray 中的第一个元素,然后像这样从中获取地址

    JSONObject info = new JSONObject(result);
    JSONObject locationInfo = info.getJSONArray("results").getJSONObject(0);
    String locationDescription = locationInfo.getString("formatted_address");

这是反向地理编码。如果你想做简单的地理编码。它几乎是这样的。 我有反向地理编码代码,所以我已经与您分享了

如需更多帮助和支持,请访问此链接Google Geocoding API

【讨论】:

    【解决方案2】:

    我在 Nexus 5X 上遇到了同样的问题,原因是使用 VPN。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-05-04
      • 2018-04-30
      • 2019-04-06
      • 1970-01-01
      • 1970-01-01
      • 2015-08-23
      • 2018-12-23
      • 1970-01-01
      相关资源
      最近更新 更多