[英]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.