如何将 Firebase 数据转换为 Java 对象...?
How to Convert Firebase data to Java Object...?
使用 Firebase Library 以 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}}} }
如何将其转换为消息对象.....????
因此,如果您想收到消息,可以执行以下操作:
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"));
}
迭代 dataSnapshot 的值并获取 Children 使用嵌套的 for 循环迭代 children 的子元素并获取所需的值...
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");
}
}
还有两种方法可以将您的数据从 Firebase DataSnapshot
中取出,不需要使用 Map<String, Object>
。
第一种方法是使用DataSnapshot
的方法遍历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) { }
});
在上面的代码片段中,我们使用 getChildren()
来获取 Iterable
您的消息。然后我们使用 child("name")
得到每个特定的 child 属性.
第二种方法是使用built-inJSON-to-POJOserializer/deserializer。当您发送消息列表时,其中的 Message
object 序列化为 JSON 并存储在 Firebase 中。
要让他们再次摆脱困境,您必须执行相反的操作:
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) { }
});
在第二个片段中,我们仍然使用 getChildren()
来获取消息,但现在我们将它们从 JSON 直接反序列化为 Message
object.
有关使用最后一种方法的简单示例应用程序,请查看 Firebase's AndroidChat sample。它还显示了如何有效地处理消息列表(提示:FirebaseListAdapter
)。
您可以使用 ChildEventListener
而不是 ValueEventListener
。
例如。我有一个名为 match 的 class,具有 3 个字符串属性 {id, name, photoUrl}
,然后我将所有值添加到 List
中。这段代码对我有用,而不是使用 for 循环。
Query queryRef = mDatabase.child("users").child(user.getUid()).child("matches");
ChildEventListener listener = new ChildEventListener() {
@Override
public void onChildAdded(DataSnapshot dataSnapshot, String previousChildName) {
Match match = dataSnapshot.getValue(Match.class);
matchList.add(match);
mAdapter = new MatchAdapter(getContext(), matchList);
recyclerView.setAdapter(mAdapter);
}
@Override
public void onChildChanged(DataSnapshot dataSnapshot, String previousChildName) {
Log.d("MESSAGEFRAGMENT", "CHILDCHANGE");
}
@Override
public void onChildRemoved(DataSnapshot dataSnapshot) {
}
@Override
public void onChildMoved(DataSnapshot dataSnapshot, String s) {
}
@Override
public void onCancelled(DatabaseError databaseError) {
}
};
queryRef.addChildEventListener(listener);
如果您想使用 Gson 库将 firebase 对象转换为 json,请使用此代码:
databaseReference.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
Object object = dataSnapshot.getValue(Object.class);
String json = new Gson().toJson(object);
Example example= new Gson().fromJson(json, Example.class);
Log.e("json","json: " + example.getGlossary());
}
@Override
public void onCancelled(@NonNull DatabaseError databaseError) {
}
});
这将使用 Gson Lib
将完整的数据库结构转换为字符串 json,然后将 json 转换为 class 对象
使用 Firebase Library 以 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}}} }
如何将其转换为消息对象.....????
因此,如果您想收到消息,可以执行以下操作:
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"));
}
迭代 dataSnapshot 的值并获取 Children 使用嵌套的 for 循环迭代 children 的子元素并获取所需的值...
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");
}
}
还有两种方法可以将您的数据从 Firebase DataSnapshot
中取出,不需要使用 Map<String, Object>
。
第一种方法是使用DataSnapshot
的方法遍历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) { }
});
在上面的代码片段中,我们使用 getChildren()
来获取 Iterable
您的消息。然后我们使用 child("name")
得到每个特定的 child 属性.
第二种方法是使用built-inJSON-to-POJOserializer/deserializer。当您发送消息列表时,其中的 Message
object 序列化为 JSON 并存储在 Firebase 中。
要让他们再次摆脱困境,您必须执行相反的操作:
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) { }
});
在第二个片段中,我们仍然使用 getChildren()
来获取消息,但现在我们将它们从 JSON 直接反序列化为 Message
object.
有关使用最后一种方法的简单示例应用程序,请查看 Firebase's AndroidChat sample。它还显示了如何有效地处理消息列表(提示:FirebaseListAdapter
)。
您可以使用 ChildEventListener
而不是 ValueEventListener
。
例如。我有一个名为 match 的 class,具有 3 个字符串属性 {id, name, photoUrl}
,然后我将所有值添加到 List
中。这段代码对我有用,而不是使用 for 循环。
Query queryRef = mDatabase.child("users").child(user.getUid()).child("matches");
ChildEventListener listener = new ChildEventListener() {
@Override
public void onChildAdded(DataSnapshot dataSnapshot, String previousChildName) {
Match match = dataSnapshot.getValue(Match.class);
matchList.add(match);
mAdapter = new MatchAdapter(getContext(), matchList);
recyclerView.setAdapter(mAdapter);
}
@Override
public void onChildChanged(DataSnapshot dataSnapshot, String previousChildName) {
Log.d("MESSAGEFRAGMENT", "CHILDCHANGE");
}
@Override
public void onChildRemoved(DataSnapshot dataSnapshot) {
}
@Override
public void onChildMoved(DataSnapshot dataSnapshot, String s) {
}
@Override
public void onCancelled(DatabaseError databaseError) {
}
};
queryRef.addChildEventListener(listener);
如果您想使用 Gson 库将 firebase 对象转换为 json,请使用此代码:
databaseReference.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
Object object = dataSnapshot.getValue(Object.class);
String json = new Gson().toJson(object);
Example example= new Gson().fromJson(json, Example.class);
Log.e("json","json: " + example.getGlossary());
}
@Override
public void onCancelled(@NonNull DatabaseError databaseError) {
}
});
这将使用 Gson Lib
将完整的数据库结构转换为字符串 json,然后将 json 转换为 class 对象