如何在Android Studio中延迟一段时间后重复播放函数?

时间:2017-08-06 16:17:55

标签: java android

如果位置节点存在,我想从节点位置检索数据。如果它存在,我希望它读取纬度和经度值并更改地图上标记的位置。此步骤必须每5秒重复一次。 现在,它只检索一次数据。我希望它只在位置节点可用时继续重复

这是当前的代码

        busReference.addListenerForSingleValueEvent(new ValueEventListener() {
        @Override
        public void onDataChange(DataSnapshot dataSnapshot) {
            for(DataSnapshot ds : dataSnapshot.getChildren()){
                usercount = ds.getChildrenCount();
                for(int i = 1; i <= usercount; i++){
                    if(ds.hasChild(userid)){
                        busno = ds.getKey();
                        driverReference = mDatabaseReference.child("Busno").child(busno);

                        driverReference.addListenerForSingleValueEvent(new ValueEventListener() {
                            @Override
                            public void onDataChange(DataSnapshot dataSnapshot) {
                                for(DataSnapshot ds1 : dataSnapshot.getChildren()) {

                                    if(ds1.hasChild("location")) {



                                            driverid = ds1.getKey();

                                            locationReference = mDatabaseReference.child("Busno").child(busno).child(driverid).child("location");

                                            locationReference.addListenerForSingleValueEvent(new ValueEventListener() {
                                                @Override
                                                public void onDataChange(DataSnapshot dataSnapshot) {
                                                    String lat1 = dataSnapshot.child("latitude").getValue().toString();
                                                    latitude = Double.valueOf(lat1);
                                                    String lon1 = dataSnapshot.child("longitude").getValue().toString();
                                                    longitude = Double.valueOf(lon1);
                                                    // Add a marker in Sydney and move the camera
                                                    LatLng sydney = new LatLng(latitude, longitude);
                                                    mMap.addMarker(new MarkerOptions().position(sydney).title("Current Location"));
                                                    mMap.moveCamera(CameraUpdateFactory.newLatLng(sydney));
                                                    mMap.animateCamera(CameraUpdateFactory.zoomTo(17));

                                                }

                                                @Override
                                                public void onCancelled(DatabaseError databaseError) {

                                                }
                                            });
                                            break;

                                    }

                                }
                            }

                            @Override
                            public void onCancelled(DatabaseError databaseError) {

                            }
                        });
                        break;
                    }
                }
            }

        }

        @Override
        public void onCancelled(DatabaseError databaseError) {

        }
    });

1 个答案:

答案 0 :(得分:0)

要检查节点是否存在,您可以使用以下

databaseReference.addListenerForSingleValueEvent(new ValueEventListener() {
          @Override public void onDataChange(DataSnapshot dataSnapshot) {
            dataSnapshot.exists()//returns true if node exists

          }

          @Override public void onCancelled(DatabaseError databaseError) {
            emitter.onError(databaseError.toException());
          }

现在,如果节点存在而不是使用addListenerForSingleValueEvent()使用addValueEventListener(),那么每当特定节点的值发生变化时,这将给你一个回调。