如何在Android Studio中延迟一段时间后重复某个功能?

如何在Android Studio中延迟一段时间后重复某个功能?

问题描述:

如果存在位置节点,我想从节点位置检索数据。如果它存在,我希望它读取纬度和经度值,并更改地图上标记的位置。这一步必须每5秒重复一次。 现在,它检索一次数据。我希望它不断重复只有当位置节点可用如何在Android Studio中延迟一段时间后重复某个功能?

这是当前的代码

 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) { 

     } 
    }); 

要检查该节点是否存在,你可以,如果使用下面

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()这会在每次特定节点的值发生变化时给予回调。

+0

我希望过程在一段时间后重复。这就是我挣扎的地方 –

+0

时间延迟没有意义,只要价值发生变化,应用程序就会收到通知。 –

+0

但这没有发生。这就是为什么我要求时间延迟的帮助 –