Your Map is not yet available... You can use something like the following method to determine if Play Services are available before making use of them (I would call it in onActivityCreated, rather than onCreate) :
protected boolean isPlayServicesAvailable() {
int status = GooglePlayServicesUtil.isGooglePlayServicesAvailable(this);
if (status == ConnectionResult.SUCCESS) {
return (true);
} else if (GooglePlayServicesUtil.isUserRecoverableError(status)) {
// deal with error
} else {
// maps is not available
}
return (false);
}
Also, your Fragment needs to implement the Callbacks required by the Play Services (interfaces GooglePlayServicesClient.ConnectionCallbacks and GooglePlayServicesClient.OnConnectionFailedListener :
/*
* 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(context, "Connected to location services", 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(context, "Disconnected from location services. 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(
SomeActivity,
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(context, "Connection error", Toast.LENGTH_SHORT).show();
}
}
}
EDIT : This is how I use it in my activity containing the map fragment :
if (isPlayServicesAvailable()) {
setContentView(R.layout.activity_with_map_fragment);
}
and in the Fragment :
if (getMap() != null) {
GoogleMap map = getMap();
// do things with the map
}
This should get you going ;-)