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 “)是(”现金在银行“)(”股票“)在开始但我决定将它们改为数字,但它给了null @makrand pawar
答案 0 :(得分:0)
您的示例中有多个问题:
cBankRef
指向\user_id\ASSETS\Cash at bank\stock\Cash in Hand
,该Cash at bank
不存在(ASSETS
下不存在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);
}
// ...
});
节点下的子节点,您需要以下内容:
SELECT
DatabaseReference#child()
方法不一个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);
}
}
// ...
});
节点下的所有内容,则可以在那里附加一个侦听器:
ASSETS
然后,当侦听器返回时,您可以使用DataSnapshot#child()
来访问从该位置检索的各个值。此外,使用DataSnapshot#exists()
是一种在使用节点之前检查节点是否存在的简单方法。
如果您计划在text
下拥有当前不存在的其他值或节点,则上述侦听器将在创建后立即返回这些值或节点。
答案 1 :(得分:0)
为实现这一目标,我建议您使用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);