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

11 浏览
0 Comments

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

使用Firebase库将数据以Message(String, String)的形式发送到服务器中的HashMap中\n例子:\n

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

\n使用Firebase方法addValueEventListener()接收数据时以以下形式获取字符串\n

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

\n如何将其转换为Message对象.....????

0
0 Comments

问题出现的原因是需要将Firebase中的数据转换为Java对象。解决方法是使用嵌套循环来迭代数据快照的值,并使用子循环来迭代子元素,然后获取所需的值。

以下是解决方法的代码:

for (DataSnapshot child : dataSnapshot.getChildren()) {
    for (DataSnapshot single : child.getChildren()) {
        Map map = (Map) single.getValue();
        String a = (String) map.get("message");
        String b = (String) map.get("name");
        textView.append(b + " -- " + a + "\n");
    }
}

通过这段代码,可以将Firebase数据转换为Java对象并将其显示在TextView中。

0
0 Comments

问题的出现是因为在获取Firebase数据并转换为Java对象时,返回的值是null。解决方法是使用循环遍历数据快照的子元素,并将其转换为Map对象,然后再从Map对象中获取所需的值。

具体代码如下:

for (DataSnapshot child : dataSnapshot.getChildren()){
    //child是数据快照的每个元素
    Map message = (Map) child.getValue();
    Message msg = new Message((String) message.getValue().get("message"),
            (String) message.get("name"));
}

另外,还需要检查发送给Firebase的请求以及从中检索数据的方法是使用`onDataChange`还是`onChildAdded`。

Firebase msgRef = fb.child("messagebox");
HashMap msgList = new HashMap<>();
Message msg = new Message(m, n);
msgList.put("Moosa", msg);
msgRef.push().setValue(msgList);

可以通过打印`dataSnapshot`和`child`的值来检查数据快照和子元素的内容。

`dataSnapshot`的值为:`{-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}}}`

`child`的值为:`{Moosa={message=Message, name=Moosa}} {Moosa={message=email, name=Kamran}} {Moosa={message=msgs, name=Imran}} {Moosa={message=samsung, name=Samad}} {Moosa={message=last, name=Moosa}} {Moosa={message=Qmobile, name=Bilal}}`

最后,通过使用嵌套的循环遍历子元素的值,可以获取到所需的数据。

作者将Moosa作为消息的键是因为这样可以将子元素作为Map对象获取,并从中获取名为Moosa的键对应的消息。

至于为什么选择Moosa作为键,作者表示没有特殊原因,只是作者的名字而已。

0
0 Comments

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

问题的出现原因:

在Firebase中获取数据的方法有两种,一种是使用DataSnapshot的方法遍历子节点,另一种是使用内置的JSON到POJO序列化/反序列化器。在第一种方法中,我们使用getChildren()方法获取消息的可迭代集合,然后使用child("name")方法获取每个具体的子节点属性。在第二种方法中,我们仍然使用getChildren()方法获取消息,但现在我们将它们从JSON反序列化回一个Message对象。

解决方法:

对于第一种方法,可以使用DataSnapshot的方法遍历子节点,然后使用child("name")方法获取每个具体的子节点属性。对于第二种方法,可以使用内置的JSON到POJO序列化/反序列化器,将消息对象序列化为JSON并存储在Firebase中,然后从中反序列化回一个Message对象。如果属性名不匹配,可以将值存储在一个Map中,但建议不要这样做,而是直接使用DataSnapshot本身。

示例代码:

第一种方法:

ref = FirebaseDatabase.getInstance().getReference("messages").limitToLast(10);
ref.addValueEventListener(new ValueEventListener() {
    public void onDataChange(DataSnapshot dataSnapshot) {
        for (DataSnapshot messageSnapshot: dataSnapshot.getChildren()) {
            String name = (String) messageSnapshot.child("name").getValue();
            String message = (String) messageSnapshot.child("message").getValue();
        }
    }
    public void onCancelled(FirebaseError firebaseError) { }
});

第二种方法:

ref.addValueEventListener(new ValueEventListener() {
    public void onDataChange(DataSnapshot dataSnapshot) {
        for (DataSnapshot messageSnapshot: dataSnapshot.getChildren()) {
            Message message = messageSnapshot.getValue(Message.class);
        }
    }
    public void onCancelled(FirebaseError firebaseError) { }
});

对于更复杂的应用程序,可以参考Firebase的AndroidChat示例,该示例演示了如何高效处理消息列表(提示:FirebaseListAdapter)。

以上就是将Firebase数据转换为Java对象的原因和解决方法。

0