繁体   English   中英

数据快照未从 Firebase 返回正确的数据

[英]Datasnapshot not returning correct data from Firebase

我需要从 Firebase 检索数据,如果user点击应用程序中的“参加事件”图标,这是一个 ImageView,那么它应该被保存到他们的个人资料中。

我一直在阅读有关ValueEventListenersChildEventListeners ,我想我最好的选择是使用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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM