如何使用 java 从 Firebase 检索新添加的子项的父键

Posted

技术标签:

【中文标题】如何使用 java 从 Firebase 检索新添加的子项的父键【英文标题】:How to retrieve parent key of newly added child from Firebase using java 【发布时间】: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 数据库示例:

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

【问题讨论】:

【参考方案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 函数。

以上是关于如何使用 java 从 Firebase 检索新添加的子项的父键的主要内容,如果未能解决你的问题,请参考以下文章

如何从 Firebase 同步检索数据?

如何使用颤振从firebase中检索电话号码

如何在 Android 中使用 MVC 模式从 firebase 检索数据? [复制]

如何使用颤振从firebase实时检索数据

如何使用 Swift 中的 url 从 firebase 正确检索数据?

如何使用 Flutter 中的 UserID 从 Firebase Firestore 检索数据?