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?
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