The GPS radio is not kept on all of the time, as it seriously drains the battery. At the point when you are calling getLastKnownLocation(), the radio is probably off.
You need to do your requestLocationUpdates() first, then wait for a fix to be supplied to your LocationListener. Any time after that (until you removeUpdates()), getLastKnownLocation() should return a non-null value.