[英]Datasnapshot not returning correct data from Firebase
我需要从 Firebase 检索数据,如果user
点击应用程序中的“参加事件”图标,这是一个 ImageView,那么它应该被保存到他们的个人资料中。
我一直在阅读有关ValueEventListeners
, ChildEventListeners
,我想我最好的选择是使用ValueEventListener
因为我需要一个datasnapshot
的的postid
用户已“得救”(参加)。 另外,已经阅读了有关查询的内容,这似乎可以帮助我,我正在尝试使用它来查看如何将其合并到我的数据中,但到目前为止还没有运气。
下面是我的 JSON 树的链接,因此您可以查看数据的结构。
有没有办法“跳过”一个孩子阅读下一个孩子,因为它包含您在该特定情况/方法中尝试使用的特定数据,并返回该数据,或者您是否必须始终按顺序进行? 我是否必须查询该数据才能使帖子显示在用户的个人资料中?
发布了数据库的图像链接。 希望有人可以提供帮助。
ProfileFragment.java
private void myAttendingEvent() {
eventsImAttendingSecondButton = new ArrayList<>();
final DatabaseReference reference = FirebaseDatabase.getInstance().getReference("Attending Event");
Query query = reference.orderByChild(firebaseUser.getUid());
reference.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
for (DataSnapshot snapshot : dataSnapshot.getChildren())
if (snapshot.exists()) {
eventsImAttendingSecondButton.add(snapshot.getKey());
}
readSaves();
}
@Override
public void onCancelled(@NonNull DatabaseError databaseError) {
}
});
}
private void readSaves() {
DatabaseReference reference = FirebaseDatabase.getInstance().getReference("Posts");
reference.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
postList_attendingEvent.clear();
for (DataSnapshot snapshot : dataSnapshot.getChildren()) {
Post post = snapshot.getValue(Post.class);
for (String id : eventsImAttendingSecondButton) {
if (post.getPostid().equals(id)) {
postList_attendingEvent.add(post);
}
}
}
Collections.reverse(postList);
eventsImagesAdapter_attendingEvent.notifyDataSetChanged();
}
@Override
public void onCancelled(@NonNull DatabaseError databaseError) {
}
});
}
第二种方法我试图检索postid
。 在我看来,这应该可行,但我没有得到任何回报。 如果用户点击“参加”事件 ChildEventListener 应该读取该数据快照并将其显示在用户的个人资料中...
private void myAttendingEvent() {
eventsImAttendingSecondButton = new ArrayList<DataSnapshot>();
DatabaseReference reference = FirebaseDatabase.getInstance().getReference("Attending Event").child(postid);
reference.addChildEventListener(new ChildEventListener() {
@Override
public void onChildAdded(@NonNull DataSnapshot dataSnapshot, @Nullable String s) {
for (DataSnapshot snapshot : dataSnapshot.getChildren()) {
if (snapshot.equals(firebaseUser.getUid()))
eventsImAttendingSecondButton.add(dataSnapshot);
}
readSaves();
}
@Override
public void onChildChanged(@NonNull DataSnapshot dataSnapshot, @Nullable String s) {
}
@Override
public void onChildRemoved(@NonNull DataSnapshot dataSnapshot) {
}
@Override
public void onChildMoved(@NonNull DataSnapshot dataSnapshot, @Nullable String s) {
}
@Override
public void onCancelled(@NonNull DatabaseError databaseError) {
}
});
readSaves();
}
不确定是否有人真的需要这些信息,但在玩弄 ChildEventListener 和 ValueEventListener 两天后,我发现我需要的确实是 ValueEventListener 终于实现了我的目标。 希望它可以帮助某人!
我的做法是这样的:
private void myAttendingEvent() {
eventsImAttendingSecondButton = new ArrayList<>();
DatabaseReference reference = FirebaseDatabase.getInstance().getReference("Attending Event");
reference.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
for (DataSnapshot snapshot : dataSnapshot.getChildren()) {
if (snapshot.hasChild(firebaseUser.getUid())){
eventsImAttendingSecondButton.add(snapshot.getKey());
}
}
readSaves();
}
@Override
public void onCancelled(@NonNull DatabaseError databaseError) {
}
});
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.