Android:在Nexus 5上,grpc失败

我正在使用地理编码器 。 在所有设备上,代码工作正常,但在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) 

我到处读解决scheme重新安装Android工作室或更新Android工作室,但这不适合我。

Solutions Collecting From Web of "Android:在Nexus 5上,grpc失败"

当我从经度和纬度得到地址时,我面临同样的问题。 我正在使用仿真器和另一辆卡车屏幕设备。 在这两个设备上它给出了同样的问题。 GRPC失败。 但是,当我在我的手机和另一个三星设备上运行这个代码,它完美的工作。 我必须在卡车屏幕设备上运行它。 所以我find了一个解决scheme,使用Google地图位置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; 

你可以search这个像反向地理编码

通过此链接,您可以获取地理编码的 API密钥

 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链接

我在Nexus 5X上面临同样的问题,原因是使用VPN。