我有这段代码:
DatabaseReference mdatabase = FirebaseDatabase.getInstance().getReference("allmessages");
mdatabase.child(mAuth.getCurrentUser().getUid()).child(userID).child(uploadID).push().setValue("somevalue");
然后在另一个班级我有这个代码:
DatabaseReference mdatabase = FirebaseDatabase.getInstance().getReference("allmessages");
mdatabase.child(mAuth.getCurrentUser().getUid()).addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
//Loop through all files in Uploads DataBase
for(DataSnapshot postSnapshot : dataSnapshot.getChildren()){
AllChatMessagesGet allChatMessagesGet = postSnapshot.getValue(AllChatMessagesGet.class);
我可以通过上面使用的代码获取mdatabase.child(mAuth.getCurrentUser().getUid()).child(userID).child(uploadID).push().setValue("somevalue");
下的所有值。
因为它没有找回任何东西。我认为addValueEventListener
中的上述代码将通过mAuth.getCurrentUser().getUid()
的所有子类进行检索,然后将#34; somevalue&#34}转发给我。
但它没有。那么如何检索" somevalue"。还有其他方法吗?因为代码是用不同的类编写的,我不知道如何获得.Child(userID)
和.Child(uploadID)
这对我来说会有问题。
mdatabase.child(mAuth.getCurrentUser().getUid())
的所有孩子以及他们下面child
以下的值。
答案 0 :(得分:1)
根据您的评论,要仅使用-LD
获取以-LCzWNw0nlC3GKsnPH8B
节点下的rootRef.child("AllChatMessages").child(uid)
开头的ID,请使用以下代码:
String uid = FirebaseAuth.getInstance().getCurrentUser().getUid();
DatabaseReference rootRef = FirebaseDatabase.getInstance().getReference();
DatabaseReference uidRef = rootRef.child("AllChatMessages").child(uid);
ValueEventListener valueEventListener = new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
for(DataSnapshot ds : dataSnapshot.getChildren()) {
for(DataSnapshot dSnapshot : ds.getChildren()) {
for(DataSnapshot snap : dSnapshot.getChildren()) {
String key = snap.getKey();
Log.d("TAG", key);
}
}
}
}
@Override
public void onCancelled(DatabaseError databaseError) {}
};
uidRef.addListenerForSingleValueEvent(valueEventListener);
输出将是您正在寻找的所有ID。
答案 1 :(得分:0)
添加并实施ChildEventListener
而不是ValueEventListener
。
您的“somevalue”应该位于覆盖onChildChanged
方法的DataSnapshot中。
答案 2 :(得分:0)
我已经在下面的代码中写了一段代码。我所做的是从用户节点获取价值。我已经通过以下代码收回了它的所有孩子,你也可以尝试相同的方式,也许它可以帮助你。
mFirebaseUserReference = FirebaseDatabase.getInstance().getReference();
userReference = mFirebaseUserReference.child("Users");
childEventListener = new ChildEventListener() {
@Override
public void onChildAdded(DataSnapshot dataSnapshot, String s) {
Log.d("Values",dataSnapshot+"");
HashMap temp = (HashMap) dataSnapshot.getValue();
if (temp!=null){
if (!temp.get("id").equals(FirebaseAuth.getInstance().getCurrentUser().getUid())){
SignInModel signInModel = new SignInModel();
signInModel.setPhotoUrl((String)temp.get("photoUrl"));
signInModel.setEmail((String)temp.get("email"));
signInModel.setName((String)temp.get("name"));
signInModel.setId((String)temp.get("id"));
arrayList.add(signInModel);
adapter.notifyDataSetChanged();
}
}
}
@Override
public void onChildChanged(DataSnapshot dataSnapshot, String s) {
}
@Override
public void onChildRemoved(DataSnapshot dataSnapshot) {
}
@Override
public void onChildMoved(DataSnapshot dataSnapshot, String s) {
}
@Override
public void onCancelled(DatabaseError databaseError) {
}
};
userReference.addChildEventListener(childEventListener);
希望有所帮助。