This is My dummy firebase structure.
{ "Restaurant":{
pushId: {
"Node A":{
0:{ id = 1234
// data of some object type
}
1:{ id = 2345
// data of some object type
}
2:{ id = 3456
// data of some object type
}
}
"Node B":{
0:{ id = 6789
// data of some object type
}
1:{ id = 9876
// data of some object type
}
2:{ id = 0000
// data of some object type
}
}
}
}
}
I want to extract data from "Node A" and "Node B" at same time with some unique id(suppose id = 1234 & 0000). "Node A" and "Node B" contains same kind of object. I tried all the information I have but could get it working.
I am attaching code which I am have written. Following code is for real data.
ref.addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
for (DataSnapshot dataSnapshotChildren : dataSnapshot.getChildren()) {
final DatabaseReference reference = dataSnapshotChildren.child(pref.getString("user_uid", null)).getRef();
for (int j = 0; j < stringArray.length; j++) {
Log.d("res_details activity", "stringArray: " + stringArray[j]);
reference.orderByChild("id").equalTo(stringArray[j]).addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
Log.d("res_details activity", "dataSnapshot: " + dataSnapshot.getValue());
for (DataSnapshot singleSnapshot : dataSnapshot.getChildren()) {
Restaurant restaurant = singleSnapshot.getValue(Restaurant.class);
Log.d("res_details activity", "restaurant: " + restaurant);
restaurantArrayList.add(restaurant);
}
Log.d("res_details activity", "restaurantArrayList: " + restaurantArrayList.size());
setValue(restaurantArrayList);
}
@Override
public void onCancelled(DatabaseError databaseError) {
Log.d("res_details activity", "databaseError: " + databaseError);
}
});
}
}
}
@Override
public void onCancelled(DatabaseError databaseError) {
}
});
All the Database references are correct. I have checked with log statement. Above code only gives me only one result at a time. Please help me modify this code get it working. Thanks in advance. Any suggestion is appreciated.
P.S - I couldn't attach screenshot of my real firebase structure as stackoverflow wont let me.
Update New snippet:
ref.addChildEventListener(new ChildEventListener() {
@Override
public void onChildAdded(DataSnapshot dataSnapshot, String s) {
Log.d("res_details activity", "s: " + s);
for (DataSnapshot dataSnapshotChildren : dataSnapshot.getChildren()) {
for (int j = 0; j < stringArray.length; j++) {
Log.d("res_details activity", "reference: " + dataSnapshotChildren.getRef().toString());
Log.d("res_details activity", "stringArray: " + stringArray[j]);
databaseReference.orderByChild("id").equalTo(stringArray[j]).addChildEventListener(new ChildEventListener() {
@Override
public void onChildAdded(DataSnapshot dataSnapshot, String s) {
Log.d("res_details activity", "dataSnapshot: " + dataSnapshot.getValue());
for (DataSnapshot singleSnapshot : dataSnapshot.getChildren()) {
Restaurant restaurant = singleSnapshot.getValue(Restaurant.class);
Log.d("res_details activity", "restaurant: " + restaurant);
restaurantArrayList.add(restaurant);
}
Log.d("res_details activity", "restaurantArrayList: " + restaurantArrayList.size());
setValue(restaurantArrayList);
}
@Override
public void onChildChanged(DataSnapshot dataSnapshot, String s) {
}
....
I have tried childEventListener
too. Now its not even triggering nested childEventListener
. And I am not getting any result now. all references are correct. Query is correct. I dont understand why snippet is not retrieving data. Totally confuse now.