Ну, во-первых, похоже, что вы пытаетесь получить доступ к переменной location до ее инициализации, так как у вас lon / lat и переменные location относятся к классу, они будут инициализированы до того, как местоположение действительно инициализировано (если оно когда-либо было)
double lat = location.getLatitude(); // location is never set, it will be null!
double lng = location.getLongitude();
На самом деле я даже не вижу, как вы инициализируете местоположение (у вас есть переменная параметра с тем же именем в вашем обновлении, но я не вижу, чтобы вы переместили ее в версию с областью действия класса).)
public void onLocationChanged(Location location) { /
Даже если вы сделали что-то вроде
this.location = new Location(location);
Внутри слушателя вы не знаете, когда это будет создано (или даже если)
Также MyLocationOverlay - это встроенный оверлей для Карт Google, который будет обрабатывать все это для вас.
Обновление Удалите переменную местоположения рядом с верхом
Измените
double lat = location.getLatitude();
double lng = location.getLongitude();
на
double lat = 0;
double lng = 0;
, затем в ваше местоположениеслушатель бросает двойку, вы просто создаете локальный, если вы это делаете.
lat = location.getLatitude();
lng = location.getLongitude();
Это, по крайней мере, решит эту проблему, снова я бы посмотрел ссылку на MyLocationOverlay, он позаботится обо всем для вас относительно текущего местоположения