2016-07-07 63 views
1

firebaseを使い始めたばかりなので、複雑なものがどれくらい簡単か、どれほど複雑な単純なものができるかは驚きです。firebaseデータベースの値を一度取得する方法(Android)

ユーザがFirebaseデータベースに存在するかどうかを確認する必要があります。存在する場合は、そのキーと値を取得する必要があります。

私は鍵を持っていると私は私のユーザーのサブツリーに行くと同じキー(ID)を持つ子供のためにlokingでDBにそれを見つけることを試みる

DatabaseReference root_firebase = FirebaseDatabase.getInstance().getReference(); 
DatabaseReference users_firebase = root_firebase.child("Users"); 
DatabaseReference friend_found = users_firebase.child(key_searched_friend); 

私はそれを持っていたら、私が呼び出そういくつかの方法

friend_found.getValue(); 

または

friend_found.child("user_name").getValue(); 

のようなしかし、それは存在しない、

私は、この値を照会する場合、データが変更されませんので、私は)私はonDataChangedオーバーライドされたメソッド(でこれを行うことはできません両方

friend_found.getKey(); 
friend_found.child("user_name").getKey(); 

を行うことができますので、これは奇妙なようです。

これは私のfirebaseデータベース構造である:あなたが言う

{ 
    "RoomNames" : { 
    "Room-KM5cof0jcoMN8a4g6vC" : { 
     "room_name" : "TESTrOOM" 
    }, 
    "Room-KM5dg_WPRdEOT4_oJ1r" : { 
     "room_name" : "testRoom2" 
    } 
    }, 
    "Users" : { 
    "User-KM5ZaGq0xvjQis05CPF" : { 
     "user_name" : "Enrique" 
    } 
    } 
} 

答えて

5

:私はこの値

を照会するときに、データが変更されないので、()onDataChanged は私がオーバーライドされたメソッドでこれを行うことはできません

どのようにRetrieve Dataのためのガイドが説明している:

Firebase data is retrieved by attaching an asynchronous listener to a FirebaseDatabase reference. The listener is triggered once for the initial state of the data and again anytime the data changes.

ので

あなたはアルにリスナーを添付あなたは現在の値を返します。データの読み取りというタイトルのセクションで

は一度、ガイドの状態:

In some cases you may want a callback to be called once and then immediately removed, such as when initializing a UI element that you don't expect to change. You can use the addListenerForSingleValueEvent() method to simplify this scenario: it triggers once and then does not trigger again.

+0

これは有用であろうどのように私は、理解していないユーザーがデータベースに追加されるたびので、それはまた、としてそれを追加します友人、他のnosql DBは、DBのどの部分でも.getValue()または.exists()を使用させています。私は確信していますが、この機能をブロックする利点はありません。 –

+0

また、独自のドキュメントのコードでも[linkToTheirCode](https://www.firebase.com/docs/android/guide/retrieving-data.html#section-reading-once)をコンパイルしていない場合でも、onClancelled実装されなければならず、onCancelledを上書きすることはできません。 エラー:(143、88)エラー:は抽象メソッドではなく、ValueEventListenerのonCancelled(DatabaseError)抽象メソッドをオーバーライドしません。 エラー:(148,21)エラー:メソッドはスーパータイプのメソッドをオーバーライドしたり実装したりしません。 ' –

+1

あなたのリンクは古いドキュメントです。 Firebase 9.x.xを使用している場合は、[ValueEventListenerの新しいドキュメント](https://developers.google.com/android/reference/com/google/firebase/database/ValueEventListener)を参照してください。 'onCancelled()'のパラメータ型が変更されました。 –

関連する問題