diff --git a/libraries/map-amap/src/main/java/com/mogo/map/impl/amap/search/GeocodeSearchClient.java b/libraries/map-amap/src/main/java/com/mogo/map/impl/amap/search/GeocodeSearchClient.java index 4de829cd54..3e6a25132f 100644 --- a/libraries/map-amap/src/main/java/com/mogo/map/impl/amap/search/GeocodeSearchClient.java +++ b/libraries/map-amap/src/main/java/com/mogo/map/impl/amap/search/GeocodeSearchClient.java @@ -4,9 +4,11 @@ import android.content.Context; import com.amap.api.services.core.AMapException; import com.amap.api.services.geocoder.GeocodeAddress; +import com.amap.api.services.geocoder.GeocodeQuery; import com.amap.api.services.geocoder.GeocodeResult; import com.amap.api.services.geocoder.GeocodeSearch; import com.amap.api.services.geocoder.RegeocodeAddress; +import com.amap.api.services.geocoder.RegeocodeQuery; import com.amap.api.services.geocoder.RegeocodeResult; import com.mogo.map.exception.MogoMapException; import com.mogo.map.impl.amap.utils.ObjectUtils; @@ -16,6 +18,7 @@ import com.mogo.map.search.geo.MogoGeocodeAddress; import com.mogo.map.search.geo.MogoRegeocodeAddress; import com.mogo.map.search.geo.query.MogoGeocodeQuery; import com.mogo.map.search.geo.query.MogoRegeocodeQuery; +import com.mogo.utils.logger.Logger; import java.util.ArrayList; import java.util.List; @@ -28,6 +31,8 @@ import java.util.List; */ public class GeocodeSearchClient implements IMogoGeoSearch, GeocodeSearch.OnGeocodeSearchListener { + private static final String TAG = "GeocodeSearchClient"; + private GeocodeSearch mClient; private IMogoGeoSearchListener mListener; @@ -74,14 +79,32 @@ public class GeocodeSearchClient implements IMogoGeoSearch, GeocodeSearch.OnGeoc @Override public void getFromLocationAsyn( MogoRegeocodeQuery query ) { if ( mClient != null ) { - mClient.getFromLocationAsyn( ObjectUtils.fromMogo( query ) ); + if ( query == null ) { + Logger.e( TAG, "query parameter is null." ); + return; + } + RegeocodeQuery origin = ObjectUtils.fromMogo( query ); + if ( origin == null || !query.check() ) { + Logger.e( TAG, "query parameter is null or no point parameter." ); + return; + } + mClient.getFromLocationAsyn( origin ); } } @Override public void getFromLocationNameAsyn( MogoGeocodeQuery query ) { if ( mClient != null ) { - mClient.getFromLocationNameAsyn( ObjectUtils.fromMogo( query ) ); + if ( query == null ) { + Logger.e( TAG, "query parameter is null." ); + return; + } + GeocodeQuery origin = ObjectUtils.fromMogo( query ); + if ( origin == null || !query.check() ) { + Logger.e( TAG, "query parameter is null or locationName is empty." ); + return; + } + mClient.getFromLocationNameAsyn( origin ); } } diff --git a/libraries/mogo-map-api/src/main/java/com/mogo/map/search/geo/query/MogoGeocodeQuery.java b/libraries/mogo-map-api/src/main/java/com/mogo/map/search/geo/query/MogoGeocodeQuery.java index 988533cc5f..159ef29be1 100644 --- a/libraries/mogo-map-api/src/main/java/com/mogo/map/search/geo/query/MogoGeocodeQuery.java +++ b/libraries/mogo-map-api/src/main/java/com/mogo/map/search/geo/query/MogoGeocodeQuery.java @@ -2,6 +2,7 @@ package com.mogo.map.search.geo.query; import android.os.Parcel; import android.os.Parcelable; +import android.text.TextUtils; /** * @author congtaowang @@ -29,6 +30,12 @@ public class MogoGeocodeQuery implements Parcelable { this.city = city; } + public boolean check(){ + if ( TextUtils.isEmpty( locationName ) ) { + return false; + } + return true; + } @Override public int describeContents() { diff --git a/libraries/mogo-map-api/src/main/java/com/mogo/map/search/geo/query/MogoRegeocodeQuery.java b/libraries/mogo-map-api/src/main/java/com/mogo/map/search/geo/query/MogoRegeocodeQuery.java index ea5bf42895..75446b08d6 100644 --- a/libraries/mogo-map-api/src/main/java/com/mogo/map/search/geo/query/MogoRegeocodeQuery.java +++ b/libraries/mogo-map-api/src/main/java/com/mogo/map/search/geo/query/MogoRegeocodeQuery.java @@ -50,6 +50,18 @@ public class MogoRegeocodeQuery implements Parcelable { this.poiType = poiType; } + public boolean check() { + if ( point == null ) { + return false; + } + if ( point.lat < 1 && point.lon < 1 ) { + return false; + } + if ( radius < 0 ) { + return false; + } + return true; + } @Override public int describeContents() {