title: Get current location in onMapReady in android using google locations API
body: <p>I'm trying to display the current location of the user on the google map inside my app but I don't want to keep updating the location as the user moves. His initial location should be recorded and showed until he closes the app. I have written the following code for this:</p>
  
  <pre><code>private GoogleMap mMap;
  protected GoogleApiClient mGoogleApiClient;
  Location mLastLocation;
  double lat =0, lng=0;
  
  @Override
  protected void onCreate(Bundle savedInstanceState) {
      super.onCreate(savedInstanceState);
      setContentView(R.layout.activity_map);
      buildGoogleApiClient();
  
      // Obtain the SupportMapFragment and get notified when the map is ready to be used.
      SupportMapFragment mapFragment = (SupportMapFragment) getSupportFragmentManager()
              .findFragmentById(R.id.map);
      mapFragment.getMapAsync(this);
  
  
  }
  
  private void buildGoogleApiClient() {
      mGoogleApiClient = new GoogleApiClient.Builder(this)
              .addConnectionCallbacks(this)
              .addOnConnectionFailedListener(this)
              .addApi(LocationServices.API)
              .build();
  }
  
  
  /**
   * Manipulates the map once available.
   * This callback is triggered when the map is ready to be used.
   * This is where we can add markers or lines, add listeners or move the camera. In this case,
   * we just add a marker near Sydney, Australia.
   * If Google Play services is not installed on the device, the user will be prompted to install
   * it inside the SupportMapFragment. This method will only be triggered once the user has
   * installed Google Play services and returned to the app.
   */
  @Override
  public void onMapReady(GoogleMap googleMap) {
      mMap = googleMap;
  
      // Add a marker in Sydney and move the camera
      mMap.setMyLocationEnabled(true);
  
      LatLng loc = new LatLng(lat, lng);
      mMap.addMarker(new MarkerOptions().position(loc).title("New Marker"));
      mMap.moveCamera(CameraUpdateFactory.newLatLng(loc));
  }
  
  @Override
  public void onConnected(Bundle bundle) {
      mLastLocation = LocationServices.FusedLocationApi.getLastLocation(
              mGoogleApiClient);
      if (mLastLocation != null) {
          lat = mLastLocation.getLatitude();
          lng = mLastLocation.getLongitude();
      }
  }
  
  @Override
  protected void onStart() {
      super.onStart();
  
      mGoogleApiClient.connect();
  }
  </code></pre>
  
  <p>The problem with this code is that I'm getting the <code>lat, lng</code> after the <code>onMapReady</code> function has already finished executing. I thought that one of the ways to correct this would be create an <code>AsyncTask</code> to ensure that the location data is retrieved before the map. However, I'm trying to implement this in a way that won't use <code>AsyncTask</code>. </p>