diff --git a/libandroid/app/src/main/java/com/mapbox/services/android/testapp/geocoding/GeocodingWidgetActivity.java b/libandroid/app/src/main/java/com/mapbox/services/android/testapp/geocoding/GeocodingWidgetActivity.java index e9798516b..9d4af7784 100644 --- a/libandroid/app/src/main/java/com/mapbox/services/android/testapp/geocoding/GeocodingWidgetActivity.java +++ b/libandroid/app/src/main/java/com/mapbox/services/android/testapp/geocoding/GeocodingWidgetActivity.java @@ -116,6 +116,7 @@ protected void onSaveInstanceState(Bundle outState) { @Override protected void onDestroy() { super.onDestroy(); + autocomplete.cancelApiCall(); mapView.onDestroy(); } diff --git a/libandroid/lib/src/main/java/com/mapbox/services/android/geocoder/ui/GeocoderAdapter.java b/libandroid/lib/src/main/java/com/mapbox/services/android/geocoder/ui/GeocoderAdapter.java index 44037ee6f..4708def2d 100644 --- a/libandroid/lib/src/main/java/com/mapbox/services/android/geocoder/ui/GeocoderAdapter.java +++ b/libandroid/lib/src/main/java/com/mapbox/services/android/geocoder/ui/GeocoderAdapter.java @@ -1,6 +1,7 @@ package com.mapbox.services.android.geocoder.ui; import android.content.Context; +import android.util.Log; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; @@ -19,6 +20,7 @@ import java.io.IOException; import java.util.List; +import retrofit2.Call; import retrofit2.Response; /** @@ -37,6 +39,7 @@ public class GeocoderAdapter extends BaseAdapter implements Filterable { private double[] bbox; private Position position; private int limit; + private Call call; private GeocoderFilter geocoderFilter; @@ -225,6 +228,18 @@ public void setLimit(int limit) { this.limit = limit; } + /** + * Can be used to cancel any calls currently in progress. It's a good idea to include in onDestroy() to prevent + * memory leaks + * + * @since 2.0.0 + */ + public void cancelApiCall() { + if (call != null) { + call.cancel(); + } + } + /* * Required by BaseAdapter */ @@ -366,6 +381,8 @@ protected FilterResults performFiltering(CharSequence constraint) { builder.setLimit(limit); } + call = builder.build().getCall(); + // Do request response = builder.build().executeCall(); } catch (IOException ioException) { diff --git a/libandroid/lib/src/main/java/com/mapbox/services/android/geocoder/ui/GeocoderAutoCompleteView.java b/libandroid/lib/src/main/java/com/mapbox/services/android/geocoder/ui/GeocoderAutoCompleteView.java index d49905b5c..d1662de27 100644 --- a/libandroid/lib/src/main/java/com/mapbox/services/android/geocoder/ui/GeocoderAutoCompleteView.java +++ b/libandroid/lib/src/main/java/com/mapbox/services/android/geocoder/ui/GeocoderAutoCompleteView.java @@ -80,6 +80,16 @@ public boolean onTouch(View view, MotionEvent event) { }); } + /** + * Can be used to cancel any calls currently in progress. It's a good idea to include in onDestroy() to prevent + * memory leaks + * + * @since 2.0.0 + */ + public void cancelApiCall() { + adapter.cancelApiCall(); + } + /* * Setters */