如何将Firebase数据转换为Java对象...?

使用 Firebase 库以添加到Message(String, String)HashMap<String, Message>

例:

Firebase fb = new Firebase(URL);
Firebase msgRef = fb.child("finished");
HashMap<String, Message> msgList = new HashMap<>();
Message msg = new Message(m, n);
msgList.put(HASHKEY, msg);
msgRef.push().setValue(msgList);

使用 Firebase 方法接收数据时,获取此表单中的字符串addValueEventListener()

{ key = finished, value = {
    -Js9Rn0uttjYIGdcv8I1={Moosa={message=email, name=Kamran}},
    -Js9Vsmv6BnVzOzpl2L8={Moosa={message=msgs, name=Imran}}, 
    -Js9WtQ8yeDwVxQMFCZb={Moosa={message=samsung, name=Samad}}, 
    -Js9RarxoJPKn4RO2HaM={Moosa={message=Message, name=Moosa}}, 
    -Js9b6f75lwwbsqQNJz0={Moosa={message=Qmobile, name=Bilal}}, 
    -Js9aDxt8TlgTGUccuxu={Moosa={message=last, name=Moosa}}} }

如何将其转换为消息对象.....????


答案 1

还有两种方法可以从 Firebase 中获取数据,而无需使用 .DataSnapshotMap<String, Object>

首先,使用 DataSnapshot 的方法遍历子项:

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) { }
});

在上面的代码段中,我们用于获取您的消息。然后,我们用于获取每个特定的子属性。getChildren()Iterablechild("name")

第二种方法是使用内置的 JSON 到 POJO 序列化程序/反序列化程序。当您发送消息列表时,其中的对象会序列化为 JSON 并存储在 Firebase 中。Message

要让他们再次摆脱困境,你必须做反比:

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) { }
});

在第二个代码段中,我们仍然使用消息来获取消息,但现在我们将它们从 JSON 直接反序列化回对象。getChildren()Message

对于使用最后一种方法的简单示例应用程序,请查看Firebase的AndroidChat示例。它还显示了如何有效地处理消息列表(提示:)。FirebaseListAdapter


答案 2

因此,如果要获取消息,可以执行以下操作:

        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"));
}

推荐