【问题标题】:How to add a delay in reading data in firebase如何在firebase中添加读取数据的延迟
【发布时间】:2019-09-25 12:15:33
【问题描述】:

我目前正在做一个在谷歌地图中显示标记的项目。我的 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) {

        }
    });

显示所有数据但延迟不起作用。这会在我没有放置处理程序的代码中产生相同的结果。我对处理程序做错了什么?我怎样才能让它发挥作用?

感谢您的帮助。

类似问题选项卡中的问题遇到不必要的延迟,我想添加延迟(我可能会被标记为有类似问题)

【问题讨论】:

    标签: java android firebase firebase-realtime-database


    【解决方案1】:

    你可以使用Handler来延迟你的项目enter code here

    使用以下代码实现。

      int delayTime=3*1000; //ss *mm 
    
        new Handler().postDelayed(new Runnable() {
    
    
                @Override
                    public void run() {
                        // call function
                    }
                },delayTime);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-07-08
      • 1970-01-01
      • 1970-01-01
      • 2020-09-14
      • 1970-01-01
      • 2017-10-13
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多