当我尝试获取推送ID的子节点的数据时,我得到一个null。我的结构看起来像这样 这是我获取消息数据的代码
DatabaseReference mMessageDatabase = FirebaseDatabase.getInstance().getReference().child("private_messages");
mMessageDatabase.child(User1).child(User2).addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
if (dataSnapshot != null) {
// getting null in message
String message = dataSnapshot.child("message").getValue(String.class);
Log.e(TAG, "CHAT_LOG: " + message);
}
}
@Override
public void onCancelled(DatabaseError databaseError) {
}
});
我的代码中是否有问题或我错过了代码?
我尝试使用查询来测试它是否给我数据。继承我的代码
messageDatabase.orderByChild("seen").equalTo("false")
.addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
if (dataSnapshot.exists()) {
for (DataSnapshot datas : dataSnapshot.getChildren()) {
String key = datas.getKey();
String seen = dataSnapshot.child(key).child("seen").getValue(String.class);
Log.e(TAG, "CHAT_LOG: Seen= " + seen);
}
}
}
@Override
public void onCancelled(DatabaseError databaseError) {
}
});
幸运的是它给了我一个数据。唯一的问题是得到消息。我在这里使用了一个查询,我需要给它一个特定的值。
答案 0 :(得分:0)
尝试以下方法:
mMessageDatabase.child(User1).child(User2).addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
if (dataSnapshot != null) {
for(DataSnapshot datas: dataSnapshot.getChildren()){
String message = datas.child("message").getValue(String.class);
Log.e(TAG, "CHAT_LOG: " + message);
}
}
}
由于快照位于User2
,因此您可以在直接子项内循环,这是推送ID并检索子message
的值