簡體   English   中英

如何獲取父節點的值作為字符串?

[英]How to get value of parent node as string?

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

因此,很明顯,我可以獲得具有鍵/值關系的子節點的所有值。 但是我無法具體獲得父節點的名稱。 那么如何獲取String格式的父節點的值?

如果我打印child.getValue().toString() ,我會得到JSON值,但對解析JSON不感興趣。 是否有獲取父節點值的特定方法?

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

您可能正在DataSnapshot上尋找getKey()方法:

    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回購

我遇到了這種情況,並解決了以下問題:

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) {

            }
        };

我很高興能夠伸出援手。

對於那些在firebaseUi中尋找密鑰的人,那么此代碼將適用於您:-

firebaseadapterinstance.getRef(position).getKey();

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM