Java 绕过firebase中的推送id节点
当我试图获取push id的子节点的数据时,我得到了一个空值 这是我获取消息数据的代码Java 绕过firebase中的推送id节点,java,android,firebase,firebase-realtime-database,Java,Android,Firebase,Firebase Realtime Database,当我试图获取push id的子节点的数据时,我得到了一个空值 这是我获取消息数据的代码 DatabaseReference mMessageDatabase = FirebaseDatabase.getInstance().getReference().child("private_messages"); mMessageDatabase.child(User1).child(User2).addListenerForSingleValueEvent(new ValueEventListener
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) {
}
});
幸运的是,它给了我一个数据。唯一的问题是得到信息。我在这里使用了一个查询,需要给它指定一个特定的值。请尝试以下操作:
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)内循环,并检索子对象消息的值,它不会给我任何值。我试图通过dataSnapshot.getChildrenCount()检查它代码>它表示0没有来自Log@xxxQDAxxx如果它根据编辑给你数据,那有什么问题?!我在FirebaseRecyclerAdapter和PopulateView中使用该代码。它始终显示子节点的最后一项密钥?您得到的结果如下String key=datas.getKey()
也使用addValueEventListener而不是AddListener for SingleValueEventCand,请通过添加屏幕截图发布您的真实数据库结构?@AlexMamo我上传了图片