From 60a7299668339ac7d3829e11da872ffb3072ad47 Mon Sep 17 00:00:00 2001 From: Felipe Martim Date: Sat, 29 Oct 2016 13:04:27 -0200 Subject: [PATCH 1/4] Fallback to google API if empty list --- .../main/java/com/devfd/RNGeocoder/RNGeocoderModule.java | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/android/src/main/java/com/devfd/RNGeocoder/RNGeocoderModule.java b/android/src/main/java/com/devfd/RNGeocoder/RNGeocoderModule.java index 642ebfb..d91f6f7 100644 --- a/android/src/main/java/com/devfd/RNGeocoder/RNGeocoderModule.java +++ b/android/src/main/java/com/devfd/RNGeocoder/RNGeocoderModule.java @@ -39,7 +39,12 @@ public void geocodeAddress(String addressName, Promise promise) { try { List
addresses = geocoder.getFromLocationName(addressName, 20); - promise.resolve(transform(addresses)); + if(addresses != null && addresses.size() > 0 { + promise.resolve(transform(addresses)); + } else { + promise.reject("NO_RESULTS", "Geocoder returned an empty list"); + } + } catch (IOException e) { From fd7ef1409b708c4c2545bd9bdeac7a8fdd29ddf9 Mon Sep 17 00:00:00 2001 From: Felipe Martim Date: Sat, 29 Oct 2016 13:11:37 -0200 Subject: [PATCH 2/4] fix parenthesis --- .../src/main/java/com/devfd/RNGeocoder/RNGeocoderModule.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/android/src/main/java/com/devfd/RNGeocoder/RNGeocoderModule.java b/android/src/main/java/com/devfd/RNGeocoder/RNGeocoderModule.java index d91f6f7..35ad2f9 100644 --- a/android/src/main/java/com/devfd/RNGeocoder/RNGeocoderModule.java +++ b/android/src/main/java/com/devfd/RNGeocoder/RNGeocoderModule.java @@ -39,7 +39,7 @@ public void geocodeAddress(String addressName, Promise promise) { try { List
addresses = geocoder.getFromLocationName(addressName, 20); - if(addresses != null && addresses.size() > 0 { + if(addresses != null && addresses.size() > 0) { promise.resolve(transform(addresses)); } else { promise.reject("NO_RESULTS", "Geocoder returned an empty list"); From 303f6f75202cfb18023ab0a9175af9a74d82d29e Mon Sep 17 00:00:00 2001 From: Felipe Martim Date: Sat, 29 Oct 2016 14:01:31 -0200 Subject: [PATCH 3/4] returning NOT_AVAILABLE, since it's a known issue --- .../src/main/java/com/devfd/RNGeocoder/RNGeocoderModule.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/android/src/main/java/com/devfd/RNGeocoder/RNGeocoderModule.java b/android/src/main/java/com/devfd/RNGeocoder/RNGeocoderModule.java index 35ad2f9..5549a05 100644 --- a/android/src/main/java/com/devfd/RNGeocoder/RNGeocoderModule.java +++ b/android/src/main/java/com/devfd/RNGeocoder/RNGeocoderModule.java @@ -42,7 +42,7 @@ public void geocodeAddress(String addressName, Promise promise) { if(addresses != null && addresses.size() > 0) { promise.resolve(transform(addresses)); } else { - promise.reject("NO_RESULTS", "Geocoder returned an empty list"); + promise.reject("NOT_AVAILABLE", "Geocoder returned an empty list"); } } From b24955b4034da9f44d90593a11cf5d3fb79a1f52 Mon Sep 17 00:00:00 2001 From: Felipe Martim Date: Sat, 29 Oct 2016 14:20:20 -0200 Subject: [PATCH 4/4] specific fallback methods --- js/geocoder.js | 20 ++++++++++++++++---- 1 file changed, 16 insertions(+), 4 deletions(-) diff --git a/js/geocoder.js b/js/geocoder.js index da2c3b7..dc49bfe 100644 --- a/js/geocoder.js +++ b/js/geocoder.js @@ -10,14 +10,26 @@ export default { this.apiKey = key; }, + geocodePositionFallback(position) { + if (!this.apiKey) { throw new Error("Google API key required"); } + + return GoogleApi.geocodePosition(this.apiKey, position); + }, + + geocodeAddressFallback(address) { + if (!this.apiKey) { throw new Error("Google API key required"); } + + return GoogleApi.geocodeAddress(this.apiKey, address); + }, + geocodePosition(position) { if (!position || !position.lat || !position.lng) { return Promise.reject(new Error("invalid position: {lat, lng} required")); } return RNGeocoder.geocodePosition(position).catch(err => { - if (!this.apiKey || err.code !== 'NOT_AVAILABLE') { throw err; } - return GoogleApi.geocodePosition(this.apiKey, position); + if (err.code !== 'NOT_AVAILABLE') { throw err; } + return this.geocodePositionFallback(position); }); }, @@ -27,8 +39,8 @@ export default { } return RNGeocoder.geocodeAddress(address).catch(err => { - if (!this.apiKey || err.code !== 'NOT_AVAILABLE') { throw err; } - return GoogleApi.geocodeAddress(this.apiKey, address); + if (err.code !== 'NOT_AVAILABLE') { throw err; } + return this.geocodeAddressFallback(address); }); }, }