簡體   English   中英

從Firebase數據庫檢索某些節點為null的數據

[英]retrieve some data from the firebase database with some nodes being null

在此處輸入圖片說明

cBankRef=myRef.child("user_id").child("ASSETS");


 cBankRef.addChildEventListener(new ChildEventListener() {
                    @Override
                    public void onChildAdded(DataSnapshot dataSnapshot, String s) {

                        String value = dataSnapshot.child("1").child("description").getValue(String.class);
                        Log.d(TAG, "onChildAdded: the value is"+value);


                        if(dataSnapshot.child("2").exists()) {
                            String valuess = dataSnapshot.child("3").child("description").getValue(String.class);
                            Log.d(TAG, "onChildAdded: the value is: " + valuess);

                        }
                        if (dataSnapshot.child("3").exists()) {
                            String values = dataSnapshot.child("1").child("description").getValue(String.class);
                            Log.d(TAG, "onChildAdded: the cash at bank is: "+values);
                        }

                        }



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

                    }

                    @Override
                    public void onChildRemoved(DataSnapshot dataSnapshot) {

                    }

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

                    }

                    @Override
                    public void onCancelled(DatabaseError databaseError) {

                    }
                });

首先,我訪問了user_id子級和ASSETS,然后通過節點(“ 1”),(“ 2”),我不得不添加其他節點以獲取值,((“ 1”)和(“ 2”) (“” Cash at Bank“)(” stock“)開頭,但我決定將其更改為數字,但給出的空@makrand pawar

您的示例中有多個問題:

  • 您的cBankRef指向\\user_id\\ASSETS\\Cash at bank\\stock\\Cash in Hand不存在(在ASSETS下不存在Cash at bank結點Cash at bank )。
  • 然后,您將一個ChildEventListener附加到此引用,該引用將不返回任何值,因為它下沒有任何子對象(因為它不存在)。
  • onChildAdded()內部,您嘗試訪問在您的示例中也不存在的houses節點(盡管house確實存在)。

要訪問“ Stock節點下的子代,您將需要以下內容:

ref = FirebaseDatabase.getInstance().getReference().child("user_id").child("ASSETS").child("Stock");

ref.addChildEventListener(new ChildEventListener() {
    @Override
    public void onChildAdded(DataSnapshot dataSnapshot, String s) {
        String value = dataSnapshot.child("house").child("values").getValue(String.class);
        Log.d(TAG, "onChildAdded: the value is: "+value);
    }
    // ...
});

DatabaseReference#child()方法不是 SELECT語句。 要訪問節點下的所有內容,只需創建對所需最高節點的引用,然后將偵聽器附加到該引用即可。

例如,如果您需要訪問ASSETS節點下的所有內容,則可以在其中附加一個偵聽器:

ref = FirebaseDatabase.getInstance().getReference().child("user_id").child("ASSETS");

ref.addValueEventListener(new ValueEventListener() {
    @Override
    public void onDataChange(DataSnapshot dataSnapshot) {
        String value = dataSnapshot.child("Stock").child("house").child("values").getValue(String.class);
        Log.d(TAG, "onChildAdded: the value is: "+value);

        if (dataSnapshot.child("Cash at bank").exists()) {
            String value = dataSnapshot.child("Cash at bank").getValue(String.class);
            Log.d(TAG, "onChildAdded: the cash at bank is: "+value);
        }
    }
    // ...
});

然后,當偵聽器返回時,您可以使用DataSnapshot#child()來訪問從該位置檢索的單個值。 另外,使用DataSnapshot#exists()是在使用節點之前檢查節點是否存在的簡單方法。

如果您計划在ASSETS下具有當前不存在的其他值或節點,則上述偵聽器將在創建它們后立即將其返回。

為此,我建議您像這樣使用ValueEventListener

DatabaseReference rootRef = FirebaseDatabase.getInstance().getReference();
DatabaseReference stockRef = rootRef.child("user_id").child("ASSETS").child("Stock");
ValueEventListener eventListener = new ValueEventListener() {
    @Override
    public void onDataChange(DataSnapshot dataSnapshot) {
        for(DataSnapshot ds : dataSnapshot.getChildren()) {
            String values = ds.child("house").child("values").getValue(String.class);
            Log.d("TAG", values);
        }
    }

    @Override
    public void onCancelled(DatabaseError databaseError) {}
};
stockRef.addListenerForSingleValueEvent(eventListener);

暫無
暫無

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

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