2017-10-30 16 views
9

Tôi đang làm việc với geocoder. Trên tất cả các thiết bị, mã hoạt động tốt nhưng trên điện thoại Nexus 5 có ngoại lệ trong nhật ký.Android: lỗi không thành công trên Nexus 5

Mã của tôi:

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)) 
} 

Lỗi của tôi:

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) 

Tôi đọc ở khắp mọi nơi là giải pháp cài đặt lại Android studio hoặc cập nhật Android studio nhưng điều này không hoạt động đối với tôi.

+0

Bạn đang sử dụng phiên bản dịch vụ trò chơi nào? Phiên bản Android nào đang chạy Nexus 5? Có các thiết bị khác mà bạn đã thử nghiệm với cùng một phiên bản Android được cài đặt không? – W3hri

+0

Đó có phải là ngoại lệ duy nhất trong nhật ký không? Không có ngoại lệ gây ra? – kichik

Trả lời

0

Tôi gặp phải sự cố tương tự khi tôi nhận được địa chỉ từ vĩ độ và kinh độ. Tôi đã sử dụng trình giả lập và một thiết bị màn hình xe tải khác. Trên cả hai thiết bị Nó cho cùng một vấn đề. GRPC không thành công. Nhưng khi tôi chạy mã này trên điện thoại di động và một thiết bị Samsung khác, nó hoạt động hoàn hảo. Tôi phải chạy nó trên thiết bị màn hình xe tải đó. Vì vậy, tôi đã tìm thấy giải pháp để sử dụng API vị trí của Google Maps để nhận vị trí từ vĩ độ và kinh độ.

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

hay đơn giản là

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

Bạn có thể tìm kiếm này như Xếp Geocoding

Bằng cách liên kết này bạn có thể nhận API chính cho Geocoding

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

Kết quả là bạn sẽ nhận được JSONObject. Lấy phần tử đầu tiên của nó trong JSONArray, và lấy địa chỉ từ nó như thế này

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

Đây là mã hóa địa lý đảo ngược. Nếu bạn muốn làm mã hóa địa lý đơn giản. Nó gần giống như thế này. Tôi có mã Mã hóa địa lý đảo ngược nên tôi đã chia sẻ với bạn.

Để được trợ giúp và hỗ trợ vui lòng truy cập liên kết này Google Geocoding API

0

tôi phải đối mặt với cùng một vấn đề trên Nexus 5X và một nguyên nhân là trong việc sử dụng VPN.

Các vấn đề liên quan