Android

How to Convert Firebase data to Java Object...?

Как преобразовать данные 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}}} }

Как я могу преобразовать их в объект Message ......????

Переведено автоматически
Ответ 1

Есть еще два способа извлечь ваши данные из Firebase, DataSnapshot которые не требуют использования Map<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() для получения Iterable ваших сообщений. Затем мы используем child("name") для получения каждого конкретного дочернего свойства.

Второй подход заключается в использовании встроенного сериализатора / десериализатора JSON-to-POJO. Когда вы отправляете список сообщений, Message объекты внутри него сериализуются в 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 объект.

Для получения простого примера приложения, использующего последний подход, взгляните на пример 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"));
}
Ответ 3

Повторяем значения DataSnapshot и получаем дочерние элементы, используя вложенный цикл for для повторения дочерних элементов дочерних элементов и получения требуемого значения...

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");
}
}
Ответ 4

Используйте этот код, если вы хотите преобразовать объект firebase в json с помощью библиотеки Gson :

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

}
});

Это преобразует полную структуру базы данных в String json, а затем json в class object с использованием Gson Lib

2023-05-19 21:21 java android firebase firebase-realtime-database