如何获取父节点的值作为字符串?

cap*_*wag 1 java android firebase firebase-realtime-database

Firebase图片

所以在上面的数据结构中,我想获得价值Aprilia Caponord 1200(在图中标出).我有Firebase引用Aprilia(根节点),我可以获取所有键/值对数据.

这是我的代码

@override
public void onDataChange(DataSnapshot dataSnapshot) {
for (DataSnapshot child : dataSnapshot.getChild()) {
    Map<?, ?> value = (Map<?, ?>) child.getValue();
    String bike_price = value.get("price").toString();
    String image_url = value.get("image_url").toString();
    }
}
Run Code Online (Sandbox Code Playgroud)

很明显,我可以获得具有键/值关系的子节点的所有值.但我无法专门获取父节点的名称.那么如何以String格式获取父节点的值?

如果我打印child.getValue().toString(),我得到JSON值,但我对解析JSON不感兴趣.是否有任何特定的方法来获取父节点值?

{Aprilia Caponord 1200={image_url=____________, price=18.35}.. }
Run Code Online (Sandbox Code Playgroud)

Fra*_*len 5

您可能正在寻找以下getKey()方法DataSnapshot:

    mFirebaseRef = new Firebase("https://yours.firebaseio.com");
    mFirebaseRef.addListenerForSingleValueEvent(new ValueEventListener() {
        @Override
        public void onDataChange(DataSnapshot dataSnapshot) {
            for (DataSnapshot child: dataSnapshot.getChildren()) {
                Log.i("MainActivity", child.getKey());
            }
        }

        @Override
        public void onCancelled(FirebaseError firebaseError) {
            Log.e("MainActivity", "onCancelled", firebaseError.toException());
        }
    });
Run Code Online (Sandbox Code Playgroud)

这里有几点需要注意:

  • 我改变getChild()了你的代码getChildren(),因为没有getChild()我知道的方法.
  • 您应该考虑使用addChildEventListener,它可以为您DataSnapshots提供较低级别的节点
  • 如果您为汽车创建"包装类",事情会变得相当容易.然后,适用于Android的Firebase SDK会自动将JSON打包到该类的实例中.请参阅我们的AndroidChat回购,以获得一个很好的例子.