2017-10-30 9 views
9

मैं geocoder साथ काम कर रहा हूँ पर असफल रहा। सभी उपकरणों पर कोड ठीक काम करता है लेकिन नेक्सस 5 फोन पर लॉग में अपवाद है।एंड्रॉयड: grpc नेक्सस 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) 

मैं हर जगह पढ़ा समाधान एंड्रॉयड स्टूडियो पुनर्स्थापित या एंड्रॉयड स्टूडियो अद्यतन लेकिन यह मेरे लिए नहीं काम करता है।

+0

नाटकों के किस संस्करण का उपयोग आप कर रहे हैं? नेक्सस 5 कौन सा एंड्रॉइड संस्करण चल रहा है? क्या आपके द्वारा परीक्षण किए गए अन्य डिवाइसों को एक ही एंड्रॉइड संस्करण के साथ स्थापित किया गया है? – W3hri

+0

क्या यह लॉग में एकमात्र अपवाद है? क्या कोई कारण अपवाद नहीं है? – kichik

उत्तर

0

मैं एक ही मुद्दे का सामना करना पड़ा जब मैं अक्षांश और देशांतर से पता हो रही थी। मैं एमुलेटर और एक और ट्रक स्क्रीन डिवाइस का उपयोग कर रहा था। दोनों उपकरणों पर यह एक ही समस्या देता है। जीआरपीसी असफल रहा। लेकिन जब मैं अपने मोबाइल और अन्य सैमसंग डिवाइस पर यह कोड चलाता हूं, तो यह पूरी तरह से काम करता है। मुझे इसे उस ट्रक स्क्रीन डिवाइस पर चलाने की ज़रूरत है। इसलिए मुझे एक समाधान मिला कि अक्षांश और देशांतर से स्थान प्राप्त करने के लिए 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; 

आप इस तरह रिवर्स जियोकोडिंग

लिए खोज सकते हैं इस लिंक करके आप जियोकोडिंग

के लिए API कुंजी प्राप्त कर सकते हैं परिणाम आप एक JSONObject मिल जाएगा में

। JSONArray में अपना पहला तत्व प्राप्त करें, और इस

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

यह रिवर्स जियोकोडिंग है जैसे कि यह से पता मिलता है। यदि आप सरल जियोकोडिंग करना चाहते हैं। यह लगभग इसी तरह है। मेरे पास रिवर्स जियोकोडिंग कोड था इसलिए मैंने आपके साथ साझा किया था।

अधिक मदद और समर्थन के लिए कृपया इस लिंक Google Geocoding API

0

जाएँ मैं Nexus 5X पर एक ही मुद्दे का सामना किया और एक कारण वीपीएन का उपयोग करने में किया गया था।

संबंधित मुद्दे