title: Fatal Exception: java.lang.IllegalStateException GoogleApiClient is not connected yet
body: <p>We have this crash in crashlytics, the weird thing is it happens in <code>onConnected()</code> callback when requesting location updates.</p>
  
  <p><strong>Code:</strong></p>
  
  <pre><code>abstract public class MainService_6_LocationClient extends MainService_5_DriverGpsLocationStoring
      implements GoogleApiClient.ConnectionCallbacks, GoogleApiClient.OnConnectionFailedListener {
  
  
    private LocationListener highAccuracyListener;
    private GoogleApiClient googleApiClient;
    private LocationRequest gpsRequest;
  
    @Override
    public void onCreate() {
      super.onCreate();
      lazyInit();
      googleApiClient.connect();
    }
  
    @Override public void onConnected(Bundle bundle) {
      Log.d(TAG, "onConnected");
      lazyInit();
      LocationServices.FusedLocationApi.requestLocationUpdates(googleApiClient, gpsRequest,
            highAccuracyListener);
    }
  
    private void lazyInit() {
  
      if (highAccuracyListener == null) {
        highAccuracyListener = new HighAccuracyLocationListener();
      }
  
      if (googleApiClient == null) {
        googleApiClient = new GoogleApiClient.Builder(this).addApi(LocationServices.API)
            .addConnectionCallbacks(this)
            .addOnConnectionFailedListener(this)
            .build();
      }
  
      if (gpsRequest == null) {
        gpsRequest = new LocationRequest().setInterval(2000)
            .setFastestInterval(1000)
            .setSmallestDisplacement(0)
            .setPriority(LocationRequest.PRIORITY_HIGH_ACCURACY);
      }
    }
  
    @Override public void onConnectionSuspended(int i) {
      Log.w(TAG, "onConnectionSuspended");
      lazyInit();
      googleApiClient.reconnect();
    }
  
    @Override public void onConnectionFailed(ConnectionResult connectionResult) {
      Log.e(TAG, "onConnectionFailed");
    }
  
    @Override public void onDestroy() {
      Log.d(TAG, "onDestroy");
  
      if (googleApiClient != null) {
        if (googleApiClient.isConnected()) {
          LocationServices.FusedLocationApi.removeLocationUpdates(googleApiClient,
              highAccuracyListener);
          googleApiClient.disconnect();
        }
  
        googleApiClient = null;
      }
      highAccuracyListener = null;
      gpsRequest = null;
  
      super.onDestroy();
    }
  </code></pre>
  
  <p><strong>Crash log:</strong></p>
  
  <pre><code>java.lang.IllegalStateException: GoogleApiClient is not connected yet.
         at com.google.android.gms.common.internal.o.a()
         at com.google.android.gms.common.api.b.b()
         at com.google.android.gms.internal.lu.requestLocationUpdates()
         at ee.mtakso.driver.service.orderState.MainService_6_LocationClient.onConnected(MainService_6_LocationClient.java:33)
         at com.google.android.gms.common.internal.f.d()
         at com.google.android.gms.common.api.b.gm()
         at com.google.android.gms.common.api.b.d()
         at com.google.android.gms.common.api.b$2.onConnected()
         at com.google.android.gms.common.internal.f.d()
         at com.google.android.gms.common.internal.f.dL()
         at com.google.android.gms.common.internal.e$h.b()
         at com.google.android.gms.common.internal.e$h.g()
         at com.google.android.gms.common.internal.e$b.gU()
         at com.google.android.gms.common.internal.e$a.handleMessage()
         at android.os.Handler.dispatchMessage(Handler.java:99)
         at android.os.Looper.loop(Looper.java:137)
         at android.app.ActivityThread.main(ActivityThread.java:4947)
         at java.lang.reflect.Method.invokeNative(Method.java)
         at java.lang.reflect.Method.invoke(Method.java:511)
         at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1038)
         at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:805)
         at dalvik.system.NativeStart.main(NativeStart.java)
  </code></pre>
  
  <p>Doesn't <code>onConnected()</code> imply <strong>GoogleApiClient</strong> is connected and ready to be used? How can I resolve this?</p>