wake-up-neo.net

Wie konvertiere ich Firebase-Daten in Java-Objekt ...?

Verwenden von Firebase Library zum Senden von Daten an den Server in der Form Message(String, String), die dem HashMap<String, Message> hinzugefügt wurde 

Beispiel:

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

Beim Empfangen von Daten mit der Firebase-Methode wird addValueEventListener() String in diesem Formular abgerufen 

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

Wie kann ich es in ein Message-Objekt konvertieren?

47
Moosa Baloch

Es gibt zwei weitere Möglichkeiten, Ihre Daten aus der Firebase DataSnapshot abzurufen, für die kein Map<String, Object> erforderlich ist.

Der erste Ansatz besteht darin, die Methoden von DataSnapshot zu verwenden, um die Kinder zu durchqueren:

ref = new Firebase("https://my.firebaseio.com/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) { }
});

Im obigen Snippet verwenden wir getChildren(), um eine Iterable Ihrer Nachrichten abzurufen. Dann verwenden wir child("name"), um jede bestimmte untergeordnete Eigenschaft zu erhalten.

Der zweite Ansatz besteht darin, den integrierten JSON-to-POJO-Serialisierer/Deserializer zu verwenden. Wenn Sie die Nachrichtenliste senden, werden die darin enthaltenen Message-Objekte in JSON serialisiert und in Firebase gespeichert.

Um sie wieder herauszuholen, müssen Sie die Umkehrung ausführen:

ref = new Firebase("https://my.firebaseio.com/messages").limitToLast(10);
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 diesem zweiten Snippet verwenden wir noch getChildren(), um an die Nachrichten zu gelangen, aber jetzt deserialisieren wir sie direkt von JSON in ein Message-Objekt.

Für eine einfache Beispielanwendung, die den letzten Ansatz verwendet, werfen Sie einen Blick auf das AndroidChat-Beispiel von Firebase . Außerdem wird gezeigt, wie Sie effizient mit der Liste der Nachrichten umgehen können (Hinweis: FirebaseListAdapter).

109

Wenn Sie also die Nachrichten erhalten möchten, können Sie Folgendes tun:

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

Iteration der Werte von dataSnapshot und Verwenden von verschachtelten for-Schleife durch Children, um die Child-Elemente von Children zu durchlaufen und den erforderlichen Wert zu erhalten ... 

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

Sie können es mit einer ChildEventListener anstelle einer ValueEventListener erstellen. 

Zum Beispiel. Ich habe eine Klasse namens match mit 3 String-Eigenschaften {id, name, photoUrl} und füge dann alle Werte in einer List hinzu. Anstatt eine for-Schleife zu verwenden, funktioniert es für mich mit diesem Code. 

    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);
2
Sergio

Sie können auf diese Antwort verweisen, wenn Sie nicht jede Liste in Firebase abfragen möchten und stattdessen eine Klasse verwenden und HashMap in der Klasse verwenden

https://stackoverflow.com/a/46486441/5611166

0
Kathan Shah

Verwenden Sie diesen Code, wenn Sie ein Firebase-Objekt in json konvertieren möchten:

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

        }
    });

Dadurch wird die gesamte Datenbankstruktur in String json konvertiert

0
Alok Gupta