[英]Android: grpc failed on Nexus 5
我正在使用地理編碼器 。 在所有設備上,代碼工作正常,但在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工作室或更新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);
或者干脆
String url = "https://maps.googleapis.com/maps/api/geocode/json?latlng=33.25845,75.256489&key=API_KEY;
您可以像反向地理編碼一樣搜索此內容
通過此鏈接,您可以獲得地理編碼的 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。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.