1. Chuwi Hi9 Air LTE Gewinnspiel ! Alle Informationen findest Du hier!
Schlagworte:
  1. TestPilot1987, 04.04.2019 #1
    TestPilot1987

    TestPilot1987 Threadstarter Neuer Benutzer

    Moin,

    ich muss gestehen, dass ich ein ähnliches Thema bereits unter https://stackoverflow.com/questions/55484682/how-to-use-room-and-databases-without-livedata-in-android eröffnet habe. Allerdings hat mir das noch nicht so recht geholfen. Ggf. kann ich auf Deutsch mein Problem besser und präziser beschreiben.

    Folgendes Problem: Man stelle sich eine App vor, die aus einer TextView und zwei Buttons "weiter" und "zurück" besteht. Darüber hinaus verfügt die App über eine SQL Datenbank, die eine Liste an Wörtern enthält (Eine Spalte "ID" und eine "word"). Ziel der App ist es nun, dem Benutzer die einzelnen Einträge der SQL Datenbank darzustellen, sprich zu Beginn wird dem Nutzer das Wort, welches in der ersten Zeile der Datenbank steht, in der Textview angezeigt, mit einem Klick auf "weiter" das Zweite usw. Man kann also durch die einzelnen Zeilen der Datenbank navigieren.

    Umsetzung: Ich habe die Klassen MainActivity, ViewModel, Repository und eine Schnittstelle DAO. Das Beispiel für Room von Google, an dem ich mich orientiert habe, ist ähnlich aufgebaut.
    Ich könnte jetzt ein LiveData Objekt, welches zum Beispiel eine Liste alle Wörter der Datenbank enthält, in meiner MainAcitivity beobachten ("observe"). Dafür müsste ich dann die entsprechende
    "onChange" Methode überschreiben. Ich würde entsprechend eine List<String> words erhalten. In meiner Activity könnte ich einen Index einführen, der mit der entsprechenden Logik über die Buttons erhöht oder erniedrigt wird und über words.get(index) in der TextView angezeigt wird.

    Problem: Streng genommen widerspricht dies dem Konzept, dass die Daten im ViewModel getrennt von der UI (Activity) verarbeitet werden.
    Also könnte man im ViewModel eine Instanz einer neu erstellten Klasse WordsManager als LiveData estellen. Diese Klasse enthält die List<String> words und den Index. Nun beobachtet man WordsManager in der Activity. Mit den Buttons erhöht oder erniedrigt man den Index in WordsManager und löst damit das entsprechende onChange Ereignis aus, welches dann die UI aktualisiert. Nun wäre der Code sauber getrennt. Problematisch ist aber nun, dass ich aus meinem ViewModel nun das Respository beobachten müsste, um die List<String> words zu erhalten und damit meinen WordsManager zu initialisieren. Das geht aber nicht.

    Frage: Wie kann ich LiveData im Repository vom ViewModel aus beobachten?

    Lösungsansatz: Ich habe einen Artikel im Netz gefunden, der die Verwendung von transformations.switchMap empfiehlt, allerdings verstehe ich das nicht. (Unter der Überschrift "LiveData in Repositories": ViewModels and LiveData: Patterns + AntiPatterns)

    Kann mir jemand Licht ins Dunkel bringen?
     
Die Seite wird geladen...
Ähnliche Themen Forum Datum
App beim Booten starten / Android 8 Android App Entwicklung Donnerstag um 11:44 Uhr
Android Einstellungen Android App Entwicklung 02.05.2019
Bluetooth Tethering ON / OFF Android App Entwicklung 04.04.2019
Kein Menübutton unter Android 8? Android App Entwicklung 13.03.2019
Android Studio Gradle Problem Android App Entwicklung 27.02.2019
Datenbank mit Kundendaten Android App Entwicklung 13.02.2019
Android playstore pusblishing: no supported devices Android App Entwicklung 11.02.2019
<a href="tel: ..." & <a href="mailto: ..." in Android Sudio webview Android App Entwicklung 29.01.2019
Theme Änderung - Android Studio Android App Entwicklung 25.01.2019
Dagger2 und Viewmodel Android App Entwicklung 23.01.2019
Du betrachtest das Thema "Wie beobachtet man LiveData im Repository vom ViewModel aus? (room, Android architecture components)" im Forum "Android App Entwicklung",
  1. Android-Hilfe.de verwendet Cookies um Inhalte zu personalisieren und dir den bestmöglichen Service zu gewährleisten. Wenn du auf der Seite weitersurfst stimmst du der Cookie-Nutzung zu.  Ich stimme zu.