LeylaGitHub / MoCoSS2023_Notzon_vonScheidt_Issa

1 stars 0 forks source link

Problem mit Datenbank für Fragen #18

Open Alessa-v-Scheidt opened 1 year ago

Alessa-v-Scheidt commented 1 year ago

Hallo Zusammen, ich habe eine Datenbank für die Fragen im Quiz angelegt. Der jetzige Stand funktioniert, ist aber fehlerhaft:

Im Code auf dem Branch ist alles momentan so, dass es funktioniert. Den Code mit dem ich versucht habe die Probleme zu beheben ist auskommentiert und liegt im QuestionViewModel.

Bitte geben Sie mir Rückmeldung, ob mit dem jetzigen funktionierenden Stand so gearbeitet werden kann oder ob der Ansatz mit Application richtig ist und umgesetzt werden soll. Wenn mit der Application gearbeitet werden soll benötige ich ihre Hilfe, wie ich die vorhandenen Fehler beheben kann und den Code lauffähig kriege.

(Gearbeitet habe ich auf dem Branch quiz-datenbank, die relevanten Dateien sind unten verlinkt)

quiz-datenbank-branch

Question Dataclass Question DAO Question Database Question ViewModel

Study Screen Quiz Screen

Unimon App (hier liegt die Navigationslogik der Screens) Unimon Application Android Manifest

C0d3GGz commented 1 year ago

Ich verstehe den ersten Punkt nicht. Warum rufen Sie denn nicht die getInstance Funktion auf?

Alessa-v-Scheidt commented 1 year ago

Ich habe so programmiert, dass die Funktionalität die wir für das Quiz brauchen vorhanden ist und funktioniert. Danach habe ich gemerkt, dass ich die getInstance-Funktion nie aufrufe. Heißt die Logik funktioniert, obwohl getInstance() nicht aufgerufen wird. Das ist der jetzige Stand im Code.

Das habe ich versucht zu beheben und rufe im ViewModel die getInstance-Funktion auf. Daraus haben sich aber die oben beschriebenen Fehler ergeben.

Der Code mit getInstance()-Aufruf liegt auskommentiert im ViewModel vor.


Wenn der Code ohne den Aufruf von getInstance() funktioniert, kann ich den dann so verwenden oder ist das fehlerhaft? Wenn es notwendig ist, dass ich die getInstance()-Funktion aufrufe benötige ich Hilfe, da mir nicht klar ist, wie dann korrekt vorzugehen ist, da ich hier ja Probleme mit Fehlermeldungen kriege.

C0d3GGz commented 1 year ago

Ihre getInstance Funktion nimmt einen Android-Context entgegen. Daher verstehe ich nicht ganz was sie meinen mit "wird getInstance() aufgerufen ohne eine Application" und "wird getInstance() aufgerufen mit Application".

Es ist sinnvoll den applicationContext zu verwenden. Wie besprochen, können Sie das AndroidViewModel nutzen um über die Application einen applicationContext zu bekommen. Einen Kontext brauchen Sie in jedem Fall.

Wenn der Code ohne den Aufruf von getInstance() funktioniert, kann ich den dann so verwenden oder ist das fehlerhaft?

Ohne den Aufruf von getInstance kriegen Sie ja keine Datenbank. D.h. das müssen Sie schon tun.

Alessa-v-Scheidt commented 1 year ago

image So habe ich versucht die getInstance-Funktion zu verwenden.

Dabei bekomme ich diese Fehlermeldung: image

C0d3GGz commented 1 year ago

Sieht in Ordnung aus. Allerdings kann ich die Fehlermeldung nicht zu dem Code zuordnen, da Sie im Code lediglich inserts zeigen. Wo rufen Sie getId() auf (steht im stracktrace)?

Alessa-v-Scheidt commented 1 year ago

image image So wie ich den Stack Trace lese wird versucht die getId() aus dem DAO aufzurufen. Dort habe ich aber keine getId()-Funktion

C0d3GGz commented 1 year ago

getId() ist von Question. Vermutlich returned Ihre Query aus Zeile 12 null, weil es die übergebene category nicht gibt. Daher würde ich empfehlen den Rückgabewert optional zu definieren. Außerdem können Sie, falls Sie die Question im UI direkt einsetzen LiveData oder Flow von Question als Rückgabewert definieren.

Aber um das Problem näher analysieren zu können, müssen Sie mir zeigen wo Sie dieses Dao benutzen, ggf. ist der gesamte StackTrace auch hilfreich.

Alessa-v-Scheidt commented 1 year ago

Das DAO verwende ich nur im QuestionViewModel image

Mit der "category" arbeite ich zusätzlich in der Navigation und den entsprechenden Screens UnimonApp StudyScreen QuizScreen

Die App öffnet normal, ich navigiere bis zum StudyScreen und wenn ich dann eine Kategorie/Fach auswähle (den entsprechenden Button klicke) stürzt die App ab. image

C0d3GGz commented 1 year ago

Diesen Fehler kann ich nicht reproduzieren, der Code läuft (besagter branch, Änderungen im QuestionViewModel wie im letzten Bild von Ihnen). Hier kann aber ein anderes Problem auftauchen: insertQuestions wird jedes mal ausgeführt, wenn das ViewModel initialisiert wird. Somit könnten sie eine ConstraintException produzieren, wenn Sie mehrfach gleiche Elemente in die Datenbank (mit gleicher PK ID) speichern wollen.

Evtl. wird die Impl des Dao-Interfaces nicht richtig neu generiert. Versuchen Sie mal in AS: File -> Invalidate Caches -> alles anhaken -> Invalidate and Restart.