2017-03-20 2 views
0

Ich habe eine Anwendung, die Firebase als Datenspeicher verwendet. Wir verwenden Tier-Muster, um unsere Geschäftslogik (und Datenzugriffslogik) von der Benutzerschnittstelle zu trennen. Das haben wir in anderen Projekten mit anderen Datenspeichern gemacht.Zurückgegebenen Wert von Firebase

Als Beispiel möchten wir Daten aus Firebase lesen, die dann in einer Klasse namens Stimmungsabfrage festgelegt werden. Dann wollen wir mit diesen Daten arbeiten und sie auch in unseren Controllern (Textviews, Listenansichten) in einer Aktivität (in unserer UI) darstellen.

In unseren Datenzugriffsklasse wir die folgende Funktion verwenden die Daten abzurufen:

root.child(strKey).addListenerForSingleValueEvent(new ValueEventListener() { 
@Override 
public void onDataChange(DataSnapshot dataSnapshot) { 
for (DataSnapshot child : dataSnapshot.getChildren()) { 
    // Hier bekommst du dann letztlich die Stimmungsabfrage 
    StimmungAbfrage stimmungAbfrage = child.getValue(StimmungAbfrage.class); 
    } 
}}) 

Das Problem mit dieser Funktion ist, dass es void zurückgibt. Daher können wir das abgerufene Objekt stimmungAbfrage nicht an die Benutzeroberfläche zurückgeben.

Die einzige Möglichkeit besteht darin, die Steuerelemente der Benutzerschnittstelle in dieser Funktion direkt zuzuweisen, die wir vermeiden möchten, da wir die Benutzerschnittstelle von der Datenzugriffslogik trennen möchten.

Wie kann dies in Firebase getan werden?

+0

Ich denke, es gibt keine Möglichkeit, dies zu tun, außer von innen 'onDataChange'. Wenn Sie den Code trennen möchten, können Sie vielleicht die Funktion von innen aufrufen und diese Funktion in Ihrem UI-Bereich platzieren oder etwas wie [Ereignis-Bus] (https://github.com/greenrobot/EventBus) verwenden. – koceeng

Antwort

0

Remove for-Schleife:

for (DataSnapshot child : dataSnapshot.getChildren()){} 

Schreiben Sie einfach:

StimmungAbfrage stimmungAbfrage = child.getValue(StimmungAbfrage.class); 

Es wird nicht leer zurück.

+0

Die Funktion onData kommt leer zurück. Es macht keinen Unterschied, ob ich eine Schleife verwende oder nicht. Die Funktion kann keinen Wert zurückgeben –

+0

können Sie die Struktur des übergeordneten Links der stimmungsAbfrage erklären. @Mo Prog – kwaghela

+0

Ich denke, Sie haben den Fall falsch verstanden. Hier ist der Link zur Funktion: https://gist.github.com/MbProg/df09c7fd24b94be52a74a336da75ede. Ich habe es in Zeile 23 kommentiert. Ich möchte den abgerufenen Wert von Firebase zurückgeben und die UI-Sachen in dieser Funktion nicht implementieren, da diese Funktion zu der Datenzugriffslogik gehört und ich sie von der Benutzeroberfläche trennen möchte. Aber onDataChange gibt void zurück und daher kann ich keinen abgerufenen Wert von Firebase zurückgeben und muss die UI-Sachen in dieser Funktion implementieren, die ich vermeiden möchte. –

Verwandte Themen