Lau*_*s V 10 android geocode 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))
}
Run Code Online (Sandbox Code Playgroud)
我的错误:
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)
Run Code Online (Sandbox Code Playgroud)
我随处可读解决方案重新安装Android工作室或更新Android工作室,但这对我不起作用.
当我从纬度和经度获取地址时,我遇到了同样的问题。我正在使用模拟器和另一个卡车屏幕设备。在这两种设备上都会出现同样的问题。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);
Run Code Online (Sandbox Code Playgroud)
或者简单地
String url = "https://maps.googleapis.com/maps/api/geocode/json?latlng=33.25845,75.256489&key=API_KEY;
Run Code Online (Sandbox Code Playgroud)
您可以像反向地理编码一样搜索它
通过此链接您可以获得用于地理编码的API 密钥
https://developers.google.com/maps/documentation/geocoding/get-api-key
Run Code Online (Sandbox Code Playgroud)
在结果中你将得到一个 JSONObject。获取 JSONArray 中的第一个元素,并从中获取地址,如下所示
JSONObject info = new JSONObject(result);
JSONObject locationInfo = info.getJSONArray("results").getJSONObject(0);
String locationDescription = locationInfo.getString("formatted_address");
Run Code Online (Sandbox Code Playgroud)
这是反向地理编码。如果您想做简单的地理编码。几乎是这样的。我有反向地理编码代码,所以我与您分享了它。
如需更多帮助和支持,请访问此链接Google Geocoding API
| 归档时间: |
|
| 查看次数: |
652 次 |
| 最近记录: |