How to Convert Firebase data to Java Object...?
There are two more way to get your data out of the Firebase DataSnapshot
that don't require using a Map<String, Object>
.
First appoach is to use the methods of DataSnapshot
to traverse the children:
ref = FirebaseDatabase.getInstance().getReference("messages").limitToLast(10);
ref.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
for (DataSnapshot messageSnapshot: dataSnapshot.getChildren()) {
String name = (String) messageSnapshot.child("name").getValue();
String message = (String) messageSnapshot.child("message").getValue();
}
}
@Override
public void onCancelled(FirebaseError firebaseError) { }
});
In the above snippet we use getChildren()
to get an Iterable
of your messages. Then we use child("name")
to get each specific child property.
The second approach is to use the built-in JSON-to-POJO serializer/deserializer. When you're sending the message list, the Message
objects inside it are serialized to JSON and stored in Firebase.
To get them out of it again, you have to do the inverse:
ref.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
for (DataSnapshot messageSnapshot: dataSnapshot.getChildren()) {
Message message = messageSnapshot.getValue(Message.class);
}
}
@Override
public void onCancelled(FirebaseError firebaseError) { }
});
In this second snippet, we're still using getChildren()
to get at the messages, but now we deserialize them from JSON straight back into a Message
object.
For a simple sample application using that last approach, have a look at Firebase's AndroidChat sample. It also shows how to efficiently deal with the list of messages (hint: FirebaseListAdapter
).
Iterating the values of dataSnapshot and getting Children using nested for loop to iterate the child elements of children and getting the Required Value...
for (DataSnapshot child : dataSnapshot.getChildren()) {
for (DataSnapshot single : child.getChildren()) {
Map<String, Object> map = (Map<String, Object>) single.getValue();
String a = (String) map.get("message");
String b = (String) map.get("name");
textView.append(b + " -- " + a + "\n");
}
}
So if you wanna get the messages you can do the following:
for (DataSnapshot child : dataSnapshot.getChildren()){
//child is each element in the finished list
Map<String, Object> message = (Map<String, Object>)child.getValue();
Message msg = new Message((String) message.getValue().get("message"),
(String) message.get("name"));
}