如何用Java从Firebase获取父键?需获取houfxWvbwyVmbHX60IGjpNkZR9w2键
我来帮你解决这个Firebase数据库读取特定键的问题!你之前尝试用ChildEventListener没成功,大概率是没在回调里做键的匹配或者直接定位路径,下面给你两种实用的方案:
方案1:直接通过路径定位目标键
如果houfxWvbwyVmbHX60IGjpNkZR9w2是chatmessage/devicetoken下的直接子节点,最直接的方式就是用child()方法逐层定位到这个键,然后读取它的值。推荐用addListenerForSingleValueEvent(只读取一次数据,避免不必要的持续监听):
ref.child("chatmessage").child("devicetoken").child("houfxWvbwyVmbHX60IGjpNkZR9w2") .addListenerForSingleValueEvent(new ValueEventListener() { @Override public void onDataChange(DataSnapshot dataSnapshot) { if (dataSnapshot.exists()) { // 可以根据实际数据类型转换,比如String、Map等 Object targetValue = dataSnapshot.getValue(); System.out.println("目标键houfxWvbwyVmbHX60IGjpNkZR9w2的值:" + targetValue); } else { System.out.println("目标键不存在,请检查路径是否正确"); } } @Override public void onCancelled(DatabaseError databaseError) { System.out.println("读取数据失败:" + databaseError.getMessage()); } });
方案2:遍历子节点匹配目标键
如果你不确定这个键的位置,或者需要在devicetoken的所有子节点中筛选出它,可以修改你的ChildEventListener,在onChildAdded回调里判断当前节点的键是否匹配:
ref.child("chatmessage").child("devicetoken").addChildEventListener(new ChildEventListener() { @Override public void onChildAdded(DataSnapshot dataSnapshot, String previousChildName) { String currentKey = dataSnapshot.getKey(); // 匹配目标键 if ("houfxWvbwyVmbHX60IGjpNkZR9w2".equals(currentKey)) { Object targetValue = dataSnapshot.getValue(); System.out.println("找到目标键的值:" + targetValue); // 如果不需要继续监听其他节点,可以在这里移除监听 // ref.child("chatmessage").child("devicetoken").removeEventListener(this); } } // 其他回调方法如果不需要处理,可以留空 @Override public void onChildChanged(DataSnapshot dataSnapshot, String previousChildName) {} @Override public void onChildRemoved(DataSnapshot dataSnapshot) {} @Override public void onChildMoved(DataSnapshot dataSnapshot, String previousChildName) {} @Override public void onCancelled(DatabaseError databaseError) { System.out.println("监听失败:" + databaseError.getMessage()); } });
几个注意点
- 检查你的Firebase数据库规则,确保当前用户有读取
chatmessage/devicetoken节点的权限,否则会触发onCancelled回调 - 如果只需要一次性读取数据,优先用
addListenerForSingleValueEvent,比addValueEventListener更节省资源 - 确认目标键的层级是否正确,比如是不是
chatmessage -> devicetoken -> houfxWvbwyVmbHX60IGjpNkZR9w2,路径错了就会找不到数据
内容的提问来源于stack exchange,提问作者amit
相关产品推荐
相关产品推荐

