title: get the Current Location with LocationCliant
body: <p>I followed what was written in
  <a href="http://developer.android.com/training/location/retrieve-current.html" rel="nofollow">this link,</a>
  This link is an article on developer.android.com, it describes and explains how to get the user's location by the Class LocationClient. 
  I followed the instructions but I added a marker on the map and focus on the location that I got. 
  When I tried to run the application I got a message that the operation of the application was stopped. 
  I debged the code and I think that the problem is around the function </p>
  
  <pre><code>getMyLocation() 
  </code></pre>
  
  <p>What am I missing? I would be happy if you could help me. 
  Below is the full code:</p>
  
  <pre><code>package ebookfrenzy.com.mapdemo;
  
  import android.app.Activity;
  import android.app.AlertDialog;
  import android.app.Dialog;
  import android.content.DialogInterface;
  import android.content.Intent;
  import android.content.IntentSender;
  import android.location.Location;
  import android.os.Bundle;
  import android.provider.Settings;
  import android.support.v4.app.DialogFragment;
  import android.support.v4.app.FragmentActivity;
  import android.util.Log;
  import android.widget.Toast;
  
  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.CameraUpdateFactory;
  import com.google.android.gms.maps.GoogleMap;
  import com.google.android.gms.maps.SupportMapFragment;
  import com.google.android.gms.maps.UiSettings;
  import com.google.android.gms.maps.model.BitmapDescriptorFactory;
  import com.google.android.gms.maps.model.CameraPosition;
  import com.google.android.gms.maps.model.LatLng;
  import com.google.android.gms.maps.model.MarkerOptions;
  
  public class MapDemoActivity extends FragmentActivity implements
          GooglePlayServicesClient.ConnectionCallbacks,
          GooglePlayServicesClient.OnConnectionFailedListener {
  
      private GoogleMap mMap; // Might be null if Google Play services APK is not available.
      LocationClient mLocationClient;
      LatLng latLngOfMyLocation;
  
      // Global constants
      /*
       * Define a request code to send to Google Play services
       * This code is returned in Activity.onActivityResult
       */
      private final static int
              CONNECTION_FAILURE_RESOLUTION_REQUEST = 9000;
      // Define a DialogFragment that displays the error dialog
      public static class ErrorDialogFragment extends DialogFragment {
          // Global field to contain the error dialog
          private Dialog mDialog;
          // Default constructor. Sets the dialog field to null
          public ErrorDialogFragment() {
              super();
              mDialog = null;
          }
          // Set the dialog to display
          public void setDialog(Dialog dialog) {
              mDialog = dialog;
          }
          // Return a Dialog to the DialogFragment.
          public Dialog onCreateDialog(Bundle savedInstanceState) {
              return mDialog;
          }
      }
      /*
       * Handle results returned to the FragmentActivity
       * by Google Play services
       */
      @Override
      protected void onActivityResult(
              int requestCode, int resultCode, Intent data) {
          // Decide what to do based on the original request code
          switch (requestCode) {
              case CONNECTION_FAILURE_RESOLUTION_REQUEST :
              /*
               * If the result code is Activity.RESULT_OK, try
               * to connect again
               */
                  switch (resultCode) {
                      case Activity.RESULT_OK :
                      /*
                       * Try the request again
                       */
                          break;
                  }
          }
      }
      private boolean servicesConnected() {
          // Check that Google Play services is available
          int resultCode =
                  GooglePlayServicesUtil.
                          isGooglePlayServicesAvailable(this);
          // If Google Play services is available
          if (ConnectionResult.SUCCESS == resultCode) {
              // In debug mode, log the status
              Log.d("Location Updates",
                      "Google Play services is available.");
              // Continue
              return true;
              // Google Play services was not available for some reason.
              // resultCode holds the error code.
          } else {
              // Get the error dialog from Google Play services
              Dialog errorDialog = GooglePlayServicesUtil.getErrorDialog(
                      resultCode,
                      this,
                      CONNECTION_FAILURE_RESOLUTION_REQUEST);
  
              // If Google Play services can provide an error dialog
              if (errorDialog != null) {
                  // Create a new DialogFragment for the error dialog
                  ErrorDialogFragment errorFragment =
                          new ErrorDialogFragment();
                  // Set the dialog in the DialogFragment
                  errorFragment.setDialog(errorDialog);
                  // Show the error dialog in the DialogFragment
                  errorFragment.show(getSupportFragmentManager(),
                          "Location Updates");
              }
          }
          return false;
      }
  
  
  
  
      /*
      * 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
      */
      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.
       */
      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.
       */
      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.
               */
              showDialog(connectionResult.getErrorCode());
          }
      }
  
  
  
  
      @Override
      protected void onCreate(Bundle savedInstanceState) {
          super.onCreate(savedInstanceState);
          setContentView(R.layout.activity_map_demo);
          //the message of the location service
          AlertDialog.Builder builder = new AlertDialog.Builder(this);
          builder.setMessage("Make sure your location services are turned on, whether not do you want turn them on?").setPositiveButton("Yes", dialogClickListener)
                  .setNegativeButton("No", dialogClickListener).show();
          mLocationClient = new LocationClient(this, this, this);
          latLngOfMyLocation = new LatLng(getMyLocation().getLatitude(),getMyLocation().getLongitude());
          setUpMapIfNeeded();
      }
      /*
      * Called when the Activity becomes visible.
      */
      @Override
      protected void onStart() {
          super.onStart();
          // Connect the client.
          mLocationClient.connect();
      }
      /*
       * Called when the Activity is no longer visible.
       */
      @Override
      protected void onStop() {
          // Disconnecting the client invalidates it.
          mLocationClient.disconnect();
          super.onStop();
      }
  
      //Setting pop-up window and is derivatives
      DialogInterface.OnClickListener dialogClickListener = new DialogInterface.OnClickListener() {
          public void onClick(DialogInterface dialog, int which) {
              switch (which){
                  case DialogInterface.BUTTON_POSITIVE:
                      //Yes button clicked
                      Intent intent=new Intent(Settings.ACTION_LOCATION_SOURCE_SETTINGS);
                      startActivity(intent);
                      break;
  
                  case DialogInterface.BUTTON_NEGATIVE:
                      //No button clicked
                      break;
              }
          }
      };
  
      @Override
      protected void onResume() {
          super.onResume();
          setUpMapIfNeeded();
      }
  
      /**
       * Sets up the map if it is possible to do so (i.e., the Google Play services APK is correctly
       * installed) and the map has not already been instantiated.. This will ensure that we only ever
       * call {@link #setUpMap()} once when {@link #mMap} is not null.
       * &lt;p&gt;
       * If it isn't installed {@link SupportMapFragment} (and
       * {@link com.google.android.gms.maps.MapView MapView}) will show a prompt for the user to
       * install/update the Google Play services APK on their device.
       * &lt;p&gt;
       * A user can return to this FragmentActivity after following the prompt and correctly
       * installing/updating/enabling the Google Play services. Since the FragmentActivity may not
       * have been completely destroyed during this process (it is likely that it would only be
       * stopped or paused), {@link #onCreate(Bundle)} may not be called again so we should call this
       * method in {@link #onResume()} to guarantee that it will be called.
       */
      private void setUpMapIfNeeded() {
          // Do a null check to confirm that we have not already instantiated the map.
          if (mMap == null) {
              // Try to obtain the map from the SupportMapFragment.
              mMap = ((SupportMapFragment) getSupportFragmentManager().findFragmentById(R.id.map))
                      .getMap();
              // Check if we were successful in obtaining the map.
              if (mMap != null) {
                  setUpMap();
                  //Setting up the map settings
                  UiSettings mapSettings;
                  mapSettings = mMap.getUiSettings();
                  //Approval to the application to use location services
                  mMap.setMyLocationEnabled(true);
                  //lock all options built-in buttons in google maps without locking their abilities
                  mapSettings.setMyLocationButtonEnabled(false);
                  mapSettings.setZoomControlsEnabled(false);
                  mapSettings.setCompassEnabled(false);
                  /***********************************************************************************************************
                   LatLng MUSEUM = new LatLng(38.8874245, -77.0200729);
                   Marker museum = mMap.addMarker(new MarkerOptions().position(MUSEUM).title("Museum").snippet("National Air and Space Museum"));
                   ***********************************************************************************************************/
              }
          }
      }
  
      /**
       * This is where we can add markers or lines, add listeners or move the camera. In this case, we
       * just add a marker near Africa.
       * &lt;p&gt;
       * This should only be called once and when we are sure that {@link #mMap} is not null.
       */
      private void setUpMap() {
          mMap.addMarker(changeMarker());
          CameraPosition cameraPosition = new CameraPosition.Builder()
                  .target(latLngOfMyLocation)
                  .zoom(22)
                  .bearing(-14)
                  .tilt(70)
                  .build();
          mMap.animateCamera(CameraUpdateFactory.newCameraPosition(cameraPosition));
      }
  
      public Location getMyLocation(){
          // Global variable to hold the current location
          Location mCurrentLocation;
          mCurrentLocation = mLocationClient.getLastLocation();
          return mCurrentLocation;
      }
  
      public MarkerOptions changeMarker(){
          // create marker
          MarkerOptions marker = new MarkerOptions().position(latLngOfMyLocation).title("ME");
  
  // Changing marker icon
          marker.icon(BitmapDescriptorFactory.fromResource(R.drawable.my_marker_icon));
          return marker;
  
      }
  }
  </code></pre>