title: How do I implement Google places autocomplete on a search widget in my android app?
body: <p>I'm pretty new to android development, and I've been making an app and following along on the developer documentation. I am trying to integrate google places api with the autocomplete feature into my app. Basically, I have integrated my map fragment and my search widget. I'm stuck on trying to integrate the code to provide a list of places every time a letter is inputted. </p>
  
  <p>index.java</p>
  
  <pre><code>package com.connortlee.justspace;
  
  import android.app.Activity;
  
  
  import android.app.SearchManager;
  import android.content.Context;
  
  import android.location.Location;
  import android.location.LocationManager;
  import android.location.LocationListener;
  import android.os.Bundle;
  
  import android.util.Log;
  import android.view.Menu;
  
  import android.view.MenuItem;
  import android.view.Window;
  import android.view.inputmethod.InputMethodManager;
  import android.widget.EditText;
  import android.widget.LinearLayout;
  
  import android.widget.SearchView;
  import android.widget.TextView;
  import android.widget.Toast;
  import android.content.Intent;
  import android.app.Dialog;
  import android.support.v4.app.DialogFragment;
  import android.content.IntentSender;
  import android.widget.TextView.OnEditorActionListener;
  import android.view.KeyEvent;
  import android.view.inputmethod.EditorInfo;
  
  import com.google.android.gms.common.ConnectionResult;
  import com.google.android.gms.common.GooglePlayServicesClient;
  import com.google.android.gms.common.GooglePlayServicesUtil;
  import com.google.android.gms.location.LocationClient;
  import com.google.android.gms.maps.CameraUpdate;
  import com.google.android.gms.maps.CameraUpdateFactory;
  import com.google.android.gms.maps.GoogleMap;
  import com.google.android.gms.maps.MapFragment;
  import com.google.android.gms.maps.model.LatLng;
  import com.google.android.gms.maps.model.MarkerOptions;
  
  
  public class index extends Activity implements LocationListener,
          GooglePlayServicesClient.ConnectionCallbacks,
          GooglePlayServicesClient.OnConnectionFailedListener {
      private GoogleMap googleMap;
      protected LatLng currentLocation;
      protected LocationManager locationManager;
      private LocationClient locationClient;
      private final static int CONNECTION_FAILURE_RESOLUTION_REQUEST = 9000;
  
  
      protected void onCreate(Bundle savedInstanceState) {
          super.onCreate(savedInstanceState);
          requestWindowFeature(Window.FEATURE_NO_TITLE);
          setContentView(R.layout.activity_index);
  
          SearchManager searchManager = (SearchManager) getSystemService(Context.SEARCH_SERVICE);
          SearchView searchView = (SearchView) findViewById(R.id.stop);
          searchView.setSearchableInfo(searchManager.getSearchableInfo(getComponentName()));
  
  
  
          //google map and location services
  
          googleMap = ((MapFragment) getFragmentManager().findFragmentById(R.id.map)).getMap();
          googleMap.setMapType(GoogleMap.MAP_TYPE_NORMAL);
          googleMap.getUiSettings().setZoomControlsEnabled(false);
  
          locationManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE);
          if (locationManager.isProviderEnabled(LocationManager.GPS_PROVIDER)) {
              locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 100, 1000, this);
          } else {
              locationManager.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, 100, 1000, this);
          }
  
      }
  
      public boolean onKeyDown(int keyCode, KeyEvent event) {
          final SearchView stop = (SearchView) findViewById(R.id.stop);
          if ((keyCode == KeyEvent.KEYCODE_BACK)) {
              stop.clearFocus();
          }
          return super.onKeyDown(keyCode, event);
      }
  
  
      private void getLocationClient() {
          if (locationClient == null) {
              locationClient = new LocationClient(this, this, this);
          }
      }
  
      @Override
      protected void onStart() {
          super.onStart();
          setUpMapIfNeeded();
          if (servicesConnected()) {
              getLocationClient();
              locationClient.connect();
          }
      }
  
      @Override
      protected void onStop() {
          locationClient.disconnect();
          super.onStop();
      }
  
      @Override
      public void onLocationChanged(Location location) {
          currentLocation = new LatLng(location.getLatitude(), location.getLongitude());
          CameraUpdate cameraUpdate = CameraUpdateFactory.newLatLngZoom(currentLocation, 15);
          googleMap.animateCamera(cameraUpdate);
          locationManager.removeUpdates(this);
      }
  
  
      @Override
      public void onStatusChanged(String s, int i, Bundle bundle) {
          Log.d("Latitude", "status");
      }
  
      public void onProviderEnabled(String provider) {
          Log.d("Latitude", "enable");
      }
  
      @Override
      public void onProviderDisabled(String s) {
          Log.d("Latitude", "disable");
      }
  
      public boolean onCreateOptionsMenu(Menu menu) {
          getMenuInflater().inflate(R.menu.index, menu);
  
          // Get the SearchView and set the searchable configuration
          SearchManager searchManager = (SearchManager) getSystemService(Context.SEARCH_SERVICE);
          SearchView searchView = (SearchView) menu.findItem(R.id.search).getActionView();
          searchView.setSearchableInfo(searchManager.getSearchableInfo(getComponentName()));
  
          return true;
      }
  
      @Override
      public boolean onOptionsItemSelected(MenuItem item) {
          // Handle action bar item clicks here. The action bar will
          // automatically handle clicks on the Home/Up button, so long
          // as you specify a parent activity in AndroidManifest.xml.
          int id = item.getItemId();
          if (id == R.id.action_settings) {
              return true;
          }
          return super.onOptionsItemSelected(item);
      }
  
      private void setUpMapIfNeeded() {
          if (googleMap == null) {
              googleMap = ((MapFragment) getFragmentManager().findFragmentById(R.id.map)).getMap();
          }
      }
  
      /*
       * Define a request code to send to Google Play services
       * This code is returned in Activity.onActivityResult
       */
  
      public boolean servicesConnected() {
          int errorCode = GooglePlayServicesUtil.isGooglePlayServicesAvailable(this);
          if (errorCode != ConnectionResult.SUCCESS) {
              GooglePlayServicesUtil.getErrorDialog(errorCode, this, 0).show();
              return false;
          }
          return true;
      }
  
  
      /*
       * Called by Location Services when the request to connect the
       * client finishes successfully. At this point, you can
       * request the current location or start periodic updates
       */
      @Override
      public void onConnected(Bundle dataBundle) {
          // Display the connection status
          Toast.makeText(this, "Connected", Toast.LENGTH_SHORT).show();
  
      }
  
  
      /*
       * Called by Location Services if the connection to the
       * location client drops because of an error.
       */
      @Override
      public void onDisconnected() {
          // Display the connection status
          Toast.makeText(this, "Disconnected. Please re-connect.",
                  Toast.LENGTH_SHORT).show();
      }
  
  
      /*
       * Called by Location Services if the attempt to
       * Location Services fails.
       */
      @Override
      public void onConnectionFailed(ConnectionResult connectionResult) {
          /*
           * Google Play services can resolve some errors it detects.
           * If the error has a resolution, try sending an Intent to
           * start a Google Play services activity that can resolve
           * error.
           */
          if (connectionResult.hasResolution()) {
              try {
                  // Start an Activity that tries to resolve the error
                  connectionResult.startResolutionForResult(this, CONNECTION_FAILURE_RESOLUTION_REQUEST);
                  /*
                   * Thrown if Google Play services canceled the original
                   * PendingIntent
                   */
              } catch (IntentSender.SendIntentException e) {
                  // Log the error
                  e.printStackTrace();
              }
          } else {
              /*
               * If no resolution is available, display a dialog to the
               * user with the error.
               */
              Toast.makeText(getApplicationContext(), "Sorry. Location services not available.", Toast.LENGTH_LONG).show();
          }
      }
  
  
  }
  </code></pre>
  
  <p>searchableActivity.java</p>
  
  <pre><code>package com.connortlee.justspace;
  
  import android.app.ListActivity;
  import android.app.SearchManager;
  import android.content.Intent;
  import android.os.Bundle;
  import android.util.Log;
  
  
  public class SearchableActivity extends ListActivity {
  
      private static final String LOG_TAG = "locationAlarm";
  
      private static final String PLACES_API_BASE = "https://maps.googleapis.com/maps/api/place";
      private static final String TYPE_AUTOCOMPLETE = "/autocomplete";
      private static final String OUT_JSON = "/json";
  
      private static final String API_KEY = "AIzaSyAjtXXyZsECNNewDVAHKiN4QHIEZLWvW3g";
  
      @Override
      public void onCreate(Bundle savedInstanceState) {
          super.onCreate(savedInstanceState);
          setContentView(R.layout.activity_index);
  
          // Get the intent, verify the action and get the query
          Intent intent = getIntent();
          if (Intent.ACTION_SEARCH.equals(intent.getAction())) {
  
              String query = intent.getStringExtra(SearchManager.QUERY);
              doMySearch(query);
  
          }
      }
  
      private void doMySearch(String query) {
  
          Log.d("Event", query);
      }
  
  
  }
  </code></pre>
  
  <p>I'm still pretty new to android development so pointers in the right direction would be helpful. Thanks!</p>