如何使用 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 检索新添加的子项的父键的主要内容,如果未能解决你的问题,请参考以下文章
如何在 Android 中使用 MVC 模式从 firebase 检索数据? [复制]