2017-08-06 93 views
0

如果存在位置節點,我想從節點位置檢索數據。如果它存在,我希望它讀取緯度和經度值,並更改地圖上標記的位置。這一步必須每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) { 

     } 
    }); 

回答

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()這會在每次特定節點的值發生變化時給予回調。

+0

我希望過程在一段時間後重復。這就是我掙扎的地方 –

+0

時間延遲沒有意義,只要價值發生變化,應用程序就會收到通知。 –

+0

但這沒有發生。這就是爲什麼我要求時間延遲的幫助 –