Ваш метод onMapReady()
, вероятно, запускается до того, как данные станут доступны в методе onDataChanged()
.Я предполагаю, что ошибка, которую вы получаете, является чем-то вроде "широта" и "долгота", являются нулевыми (предположение, потому что операция не показывала, как переменные были объявлены).Это условие гонки. Один метод завершен, прежде чем другой метод сможет предоставить данные.Вы должны учесть недостающие данные.
Поэтому измените код onMapReady()
следующим образом:
@Override
public void onMapReady(GoogleMap googleMap) {
mMap = googleMap;
updateMapLocation();
}
и измените код снимка на:
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
// This method is called once with the initial value and again
// whenever data at this location is updated.
for (DataSnapshot snapm: dataSnapshot.getChildren()) {
latitude = snapm.child("lat").getValue(Long.class);
longitude = snapm.child("long").getValue(Long.class);
Speed = snapm.child("speed").getValue(String.class);
updateMapLocation();
}
}
Сейчас, добавьте метод updateMapLocation()
, который проверит, являются ли значения широты и долготы нулевыми, иначе отобразит местоположение:
private void updateMapLocation(){
if(latitude == null || longitude == null){
Log.e("updateMapLocation", "latitude or longitude is null")
}
else{
LatLng sydney = new LatLng(latitude, longitude);
mMap.addMarker(new MarkerOptions().position(sydney).title("Tezgam\n Current location"));
mMap.moveCamera(CameraUpdateFactory.newLatLng(sydney));
}
}