2

Firebase 映像

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

这是我的代码

@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();
    }
}

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

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

{Aprilia Caponord 1200={image_url=____________, price=18.35}.. }
4

3 回答 3

6

您可能正在寻找以下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());
        }
    });

这里有几点需要注意:

  • 我将getChild()您的代码更改为getChildren(),因为没有getChild()我知道的方法。
  • 您应该考虑使用addChildEventListener,它为您DataSnapshots提供较低级别的节点
  • 如果您为汽车创建“包装类”,事情会变得容易得多。然后,适用于 Android 的 Firebase SDK 会自动将 JSON 解包到该类的实例中。请参阅我们的AndroidChat 存储库以获取一个很好的示例。
于 2015-06-05T15:57:04.830 回答
0

对于那些在 firebaseUi 中寻找密钥的人,这段代码适用于你:-

firebaseadapterinstance.getRef(position).getKey();

于 2019-07-10T09:36:18.740 回答
0

我遇到了这种情况并解决了如下方式:

final ChildEventListener countsListener = new ChildEventListener() { //for querying how many card created by each user in a specific period
            @Override
            public void onChildAdded(@NonNull DataSnapshot dataSnapshot, @Nullable String s) {
                /**
                 * $ROOT/Apirilia/Apirilia_id/CardId/IMG_URL
                 * $ROOT/Apirilia/Apirilia_id/CardId/PRICE
                 *                      ^[key] :[value]
                 */
                if (dataSnapshot == null) {
                    Logger.e("!!! dataSnapshot is null");
                    return;
                }
                String apirilia_id = dataSnapshot.getRef().getParent().getKey();
                Logger.d("... Apirilia_id:" + apirilia_id);
            }

            @Override
            public void onChildChanged(@NonNull DataSnapshot dataSnapshot, @Nullable String s) {

            }

            @Override
            public void onChildRemoved(@NonNull DataSnapshot dataSnapshot) {

            }

            @Override
            public void onChildMoved(@NonNull DataSnapshot dataSnapshot, @Nullable String s) {

            }

            @Override
            public void onCancelled(@NonNull DatabaseError databaseError) {

            }
        };

我很感激能够伸出援助之手。

于 2018-12-03T04:23:04.920 回答