Как добавить задержку при чтении данных в firebase - PullRequest
0 голосов
/ 25 сентября 2019

В настоящее время я делаю проект, который отображает маркеры на картах 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) {

        }
    });

Отображает все данные, но задержка не работает.Это дает тот же результат в коде, где я не помещаю обработчик.Что я сделал не так с обработчиком?Как я могу заставить это работать?

Спасибо за помощь.

Вопросы на вкладке с похожими вопросами имеют проблемы с нежелательными задержками. В моем случае я хочу добавить задержку (возможно, у меня есть аналогичный вопрос)

Ответы [ 2 ]

0 голосов
/ 26 сентября 2019

Статическая установка 3000 миллисекунд, поскольку задержка является проблемой, потому что они будут запланированы почти одновременно - и поэтому они будут размещены почти одновременно.Вам нужен for цикл с индексом int i=0 и приращением i++.Тогда вы можете правильно установить задержку как: (i+1) * 3000.

Это добавит смещение 3000 миллисекунд за итерацию, без задержки всего цикла.

0 голосов
/ 26 сентября 2019

Вы можете достичь, используя приведенный ниже код.

new Handler().postDelayed(new Runnable() {
            @Override
            public void run() {
                // call function
            }
        },1 * 60 * 1000);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...