2017-12-02 3 views
0

私は以下のデータ構造を内部に持っていますFirebaseリアルタイムデータベース。私はどのようにコンテンツを抽出するアイデアがありません。Firebaseデータベース - キーの下で値directyを取得するには? (カスタムクラスの下にはありません)

マイfirebaseリアルタイムのデータベース構造:

root 
|--inGroup 
    |--#userID 
    |--#randomId:(the string I want to extract is here) 
    |--#randomId2:(the string I want to extract is here) 
    |--#randomIdX:(the string I want to extract is here) 

いずれも、どのように私のAndroidアプリでそれを抽出するために私を教えることができますか?

マイコード:

firebaseデシベルからコンテンツを抽出するためのパーツ:

FirebaseDatabase database = FirebaseDatabase.getInstance(); 
DatabaseReference groupInviteRef = database.getReference("inGroup").child(FirebaseAuth.getInstance().getCurrentUser().getUid()); 

groupInviteRef.addListenerForSingleValueEvent(new ValueEventListener() { 
    @Override 
    public void onDataChange(DataSnapshot dataSnapshot) { 
     for (DataSnapshot datasnapshot : dataSnapshot.getChildren()) { 
      -----I am not sure what to fill in here-------- 
     } 
    } 
} 

私は

//Insert a record into InGroup tree 
DatabaseReference inGroupRef = FirebaseDatabase.getInstance().getReference("inGroup").child(uid); 
inGroupRef.push().setValue(groupId); 

私はドン抽出したいデータを保存するための部分」次の理由により、データベースから文字列を抽出する方法を理解しています。

1)通常、値の属性を取得するにはdatasnapshot.getValue(XXXX.Class)を使用しますが、今回は自分自身のカスタムクラスではなく文字列そのものです。

2)私はdatasnapshot.getvalue(String.class)を使用しようとしました。しかし、このエラーが発生しました:

com.google.firebase.database.DatabaseException: Failed to convert value of type java.util.HashMap to String 

誰も私が望む情報を抽出する方法を教えてもらえますか?またはpush().setValue()を実行するときにカスタムクラスに入れなければなりませんか?

ありがとうございます!

答えて

1

最後に、次のコードを使用して作成しますが、なぜ最初は動作しないのかわかりません。

groupInviteRef.addListenerForSingleValueEvent(new ValueEventListener() { 
     @Override 
     public void onDataChange(DataSnapshot dataSnapshot) { 
      for (DataSnapshot snapshot : dataSnapshot.getChildren()) { 
       String value = snapshot.getValue().toString(); 
       Log.d("val",value); 
      } 
     } 
+0

あなたの問題は解決しましたが、それがうまくいかなかったのは、onDataChangeの引数、つまりdataSnapshotと同じvaribale名をforループに使用していたためでした –

0
@Override 
    public void onDataChange(DataSnapshot dataSnapshot) { 
       for (DataSnapshot noteDataSnapshot : dataSnapshot.getChildren()) { 
        String key = noteDataSnapshot.getValue().toString(); 

        for (DataSnapshot snapshot : noteDataSnapshot.getChildren()){ 
         snapshot.getKey() // YOUR VALUE 
        } 
       } 
    } 
+0

私は試しましたが、動作しません。 (私は最初のforループの下でnoteDataSnapshot.getChildrenCountを印刷しようとしましたが、0を出力します)。だから、私がプリントしたいデータは子供ではないと思いますか? –

関連する問題