В настоящее время я делаю проект, который отображает маркеры на картах Google.Моя база данных Firebase содержит координаты для маркеров.Я использовал Thread.sleep, но он замораживает все приложение.Я сейчас пытаюсь обработчик, вот мой код:
public void onMapReady(GoogleMap googleMap) {
mMap = googleMap;
ref.child("tuofu").addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
for(DataSnapshot dataSnapshot1 : dataSnapshot.getChildren())
{
Ship p = dataSnapshot1.getValue(Ship.class);
bearing = p.getBearing();
latitude = p.getLatitude();
longitude = p.getLongitude();
mmsi = String.valueOf(p.getMmsi());
name = p.getName();
speed = p.getSpeed();
entrynumber = p.getEntrynumber();
handler.postDelayed(new Runnable() {
@Override
public void run() {
LatLng sydney = new LatLng(latitude, longitude);
mMap.addMarker(new MarkerOptions().position(sydney).title(name).snippet(String.valueOf(entrynumber)));
mMap.moveCamera(CameraUpdateFactory.newLatLngZoom((sydney), 15));
}
}, 3000);
}
}
@Override
public void onCancelled(@NonNull DatabaseError databaseError) {
}
});
}
Этот код отображает только последние данные в базе данных.И этот код:
public void onMapReady(GoogleMap googleMap) {
mMap = googleMap;
ref.child("tuofu").addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
for(final DataSnapshot dataSnapshot1 : dataSnapshot.getChildren())
{
handler.postDelayed(new Runnable() {
@Override
public void run() {
Ship p = dataSnapshot1.getValue(Ship.class);
bearing = p.getBearing();
latitude = p.getLatitude();
longitude = p.getLongitude();
mmsi = String.valueOf(p.getMmsi());
name = p.getName();
speed = p.getSpeed();
entrynumber = p.getEntrynumber();
LatLng sydney = new LatLng(latitude, longitude);
mMap.addMarker(new MarkerOptions().position(sydney).title(name).snippet(String.valueOf(entrynumber)));
mMap.moveCamera(CameraUpdateFactory.newLatLngZoom((sydney), 15));
}
}, 3000);
}
}
@Override
public void onCancelled(@NonNull DatabaseError databaseError) {
}
});
Отображает все данные, но задержка не работает.Это дает тот же результат в коде, где я не помещаю обработчик.Что я сделал не так с обработчиком?Как я могу заставить это работать?
Спасибо за помощь.
Вопросы на вкладке с похожими вопросами имеют проблемы с нежелательными задержками. В моем случае я хочу добавить задержку (возможно, у меня есть аналогичный вопрос)