2017-12-18 273 views
0

我怎样才能让一个空隙从数据库中获得一些价值,但不刷新此数据,每次对数据库的修改,这是无效我:从数据库中获取价值,而不EvenListener

private void getUser() { 



    userInformationsList.clear(); 
    DatabaseReference.addValueEventListener(new ValueEventListener() { 
     @Override 
     public void onDataChange(DataSnapshot dataSnapshot) { 

      FirebaseUser user = mAuth.getCurrentUser(); 
      userID = user.getUid(); 
      nameID = dataSnapshot.child("Users").child(userID).child("name").getValue(String.class); 
      Lat = dataSnapshot.child("Users").child(userID).child("Coordenates/Rute/Lat").getValue(String.class); 
      Lng = dataSnapshot.child("Users").child(userID).child("Coordenates/Rute/Lng").getValue(String.class); 
      DataSnapshot dS = dataSnapshot.child("Coordenate").child(Lat).child(Lng); 
      toolbar.setTitle(nameID); 
      for(DataSnapshot Ds : dS.getChildren()) { 
       Object key = Ds.getKey(); 
       String StringKey = String.valueOf(key); 
       getname(StringKey); 
      } 
     } 
     @Override 
     public void onCancelled(DatabaseError databaseError) { 
      Toast.makeText(SearchActivity.this,"Error 404",Toast.LENGTH_SHORT).show(); 
     } 
    }); 
} 

它工作正常当我调用它时,只要数据库发生更改就会触发它。我想是因为无效onDataChangeValueEventListener

我徘徊,如果有其他方法调用DataSnapshot。

回答

0

要仅从数据库中读取数据一次而没有收到更新通知,请将您的听众注册为addListenerForSingleValueEvent。所以:

DatabaseReference.addListenerForSingleValueEvent(new ValueEventListener() { 

这和更多的是在Firebase documentation on reading data from the database解释。

+0

它没有工作,每次dat改变时都会触发。 –

+1

这似乎很奇怪。 'addListenerForSingleValueEvent'会立即触发当前值,然后停止监听。我从来没有见过它的工作方式不同于此,所以很可能它是以你设置的方式工作的。通过你共享的代码,每次调用'getUser'时,'onDataChange'都会被调用。 –

+0

因为我想在按下按钮时调用它,但在数据库发生更改时不能调用它。任何想法我怎么能实现? –