【问题标题】:How to retrieve parent key of newly added child from Firebase using java如何使用 java 从 Firebase 检索新添加的子项的父键
【发布时间】:2018-01-06 07:35:37
【问题描述】:

我想检索“7753400075_Canada_twinpalms_||_twinpalms_20170824001545_F5BA7F33AD51CE283332001BEC409A46”键,怎么办?这是我的代码...

ref.addValueEventListener(new ValueEventListener() { //addListenerForSingleValueEvent
                @Override
                public void onCancelled(DatabaseError arg0) {
                }
                @Override
                public void onDataChange(DataSnapshot dataSnapshot) {
                    Object response = dataSnapshot.getValue();
                    System.out.println("read data :"+response);
                }
            });
            ref.child("chatmessage").child("devicetoken").addChildEventListener(new ChildEventListener() {

                @Override
                public void onChildAdded(DataSnapshot dataSnapshot, String previousChildName) {
//                  Log.d(TAG, "onChildAdded:" + dataSnapshot.getKey());
//                  System.out.println("previousChildName :"+previousChildName);

                    }
                }
});

这是 Firebase 数据库示例:

我尝试使用子数据快照方法但没有奏效。它返回所有数据。但我只需要让新的孩子添加父母。对此的任何帮助将不胜感激。

【问题讨论】:

    标签: java firebase firebase-realtime-database


    【解决方案1】:

    要解决此问题,您需要过滤结果。假设 chatmessage 是您的 Firebase 数据库根目录的直接子代,请使用以下代码:

    DatabaseReference rootRef = FirebaseDatabase.getInstance().getReference();
    DatabaseReference deviceTokenRef = rootRef.child("chatmessage").child("devicetoken");
    Query query = deviceTokenRef.orderByKey().limitToLast(1);
    ValueEventListener eventListener = new ValueEventListener() {
        @Override
        public void onDataChange(DataSnapshot dataSnapshot) {
            for(DataSnapshot ds : dataSnapshot.getChildren()) {
                String key = ds.getKey();
                Log.d("TAG", key);
            }
        }
    
        @Override
        public void onCancelled(DatabaseError databaseError) {}
    };
    query.addListenerForSingleValueEvent(eventListener);
    

    【讨论】:

    • 它返回“devicetoken”作为父级。没有返回预期的结果。
    • 我还有一个问题。我在 onChildAdded 下写了 for(DataSnapshot ds : dataSnapshot.getChildren()) ,这将对我数据库中存在的所有数据执行。为什么?
    • 我只想获取插入的数据,而不是所有数据。
    • 不是来自你的整个数据库,只是来自那个特定的位置。 DataSnapshot 对象是特定位置的快照。
    • 在我的情况下,如果在 firebase 中插入了某些内容,则不会执行 onDataChange 函数。仅执行 onChildAdded 函数。
    猜你喜欢
    • 2019-07-19
    • 1970-01-01
    • 2021-08-14
    • 2017-03-28
    • 1970-01-01
    • 2018-07-26
    • 1970-01-01
    • 2018-11-04
    • 1970-01-01
    相关资源
    最近更新 更多