2017-12-18 2 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(); 
     } 
    }); 
} 

それは正常に動作します私がそれを呼び出すと、データベースが変更されるたびにトリガされます。私は考えているので、空きはonDataChangeまたはValueEventListenerです。

DataSnapshotを呼び出す他のメソッドがある場合は、私は迷っています。

答えて

0

データベースから一度だけデータを読み取り、更新の通知を受け取らないようにするには、リスナーをaddListenerForSingleValueEventに登録します。従って:

DatabaseReference.addListenerForSingleValueEvent(new ValueEventListener() { 

これは多くのことがFirebase documentation on reading data from the databaseで説明されています。

+0

データが変更されるたびに引き続き動作しません。 –

+1

それは奇妙に思えます。 'addListenerForSingleValueEvent'は現在の値に対して「即時」起動し、その後リッスンを停止します。私はそれがそれとは違った働きをしたことは今までには見たことがないので、あなたが設定した方法である可能性が最も高いでしょう。共有したコードでは、 'getUser'を呼び出すたびに' onDataChange'が呼び出されます。 –

+0

ボタンが押されたときに呼び出すが、データベースが変更されていないときは呼び出さないでください。どのようなアイデアを実装することができますか? –

関連する問題