Hilfe beim Konzept zu Frage-Spiel App (Android (Java/Kotlin))?

6 Antworten

Vom Fragesteller als hilfreich ausgezeichnet
Wo könnten die Fragen gespeichert werden (in App oder online Datenbank)?

Am besten speicherst du die Fragen direkt in der App, damit sie auch offline verfügbar sind. Damit neue Fragen nachgeladen werden können, gibt es zwei Möglichkeiten:

  1. Die App updaten
  2. Neue Fragen aus einer Datenbank nachladen

Die zweite Variante wäre sinnvoller, da dadurch häufige vollständige Updates vermieden werden und nur die Datenmenge geladen wird, die tatsächlich auch erforderlich ist.

Wie könnte zufällig eine noch nicht beantwortete Frage gestellt werden?

Alle noch nicht beantworteten Fragen kannst du in einer Datenstruktur speichern (bzw. Verweise auf die Fragen, die an einer anderen Stelle gespeichert werden), sodass du jede Frage mit einem bestimmten Index ansprechen kannst. Du musst also lediglich eine Zufallszahl generieren: https://stackoverflow.com/questions/363681/how-to-generate-random-integers-within-a-specific-range-in-java

Wie bringt man Sprachenauswahl in's Konzept?

Dafür hat Android schon ein praktisches Konzept mit an Bord: https://stackoverflow.com/questions/11794944/why-to-use-strings-xml

Jeder Text befindet sich also in einer einzigen Datei, die du übersetzen oder übersetzen lassen kannst.

Wie lässt man Anzeigen, wie viele hier Ja oder Nein gedrückt haben (Wie macht man sowas mit Cloud Firestore/Firebase Database)?

Jede Frage sollte eine numerische ID besitzen. In einer Datenbanktabelle kannst du dann zu jeder ID die zugehörige Anzahl der beiden Antwortmöglichkeiten jeweils in einer Spalte speichern. Bei jeder Antwort baust du eine Verbindung zur Datenbank auf und erhöhst den jeweiligen Wert.

  • Datenbank, da alle eine genaue ID brauchen, wegen deiner letzter Frage. Beispiel:
id-question

1-"Würdest du für immer unsichtbar sein können, dafür aber nur noch in schwarz-weiß sehen können?"
  • Mit einer Liste von unbeantworteten Fragen und einem Random.
Random random = new Random();
String question = questions.get(random.nextInt(list.size()));
  • Du könntest für jede Sprache eine neue Tabelle (in der Datenbank) benutzen. Pass aber auf, dass die IDs die gleichen bleiben!
  • Du musst den Fragen eine ID zuweisen, die du dann in der Datenbank mit dem jeweiligen Ergebnis speicherst/updatest. Aber aufpassen, niemals die Datenbank-Daten (Passwörter, Tokens etc.) direkt in der App speichern! Beispiel zum Datenbank-Aufbau:
id-yes-no-skipped-total

1-200-250-10-460
2-230-220-5-455

zu 1.) Kannst die Fragen einfach als json File auf einen Server legen und dann das JSON File in der App einlesen. Eine Frage könnte mit einer ID und der Frage selbst dort hinterlegt sein. Beispiel:

{
  "0" : "Wie viele Ecken hat ein Octaeder?",
  "1" : "Wer ist Hans Albers?"
}

usw.

zu 2.) Die ID der Frage speicherst du intern in der App ab und nimmst nur die Fragen, wo die ID noch nicht vorhanden ist.

zu 3.) Einfach mehrere JSON Files auf dem Server legen und mit einem entsprechend prefix benennen: de_questions.json

zu 4.) Da eignet sich ein request auf ein PHP File. Bei dem Request übersendest du die ID der Frage und die Antwort.

Vorteil via PHP File: Das File liegt irgendwo auf einem WebServer(WebSpace). Die App sendet einen GET/POST Request mit den Daten. Das PHP File greift auf die DB zu und speichert die geänderten Daten. Ebenso kannst du auch den Weg nehmen, um Daten aus der DB zurück zu bekommen.

Woher ich das weiß:Hobby
Wo könnten die Fragen gespeichert werden (in App oder online Datenbank)?

Die erste Frage wäre hier, wie denn Fragen überhaupt generiert werden. Wenn du alle Fragen vorgibst, könnte es auch ausreichen, sie in einer Datenbank (SQLite) auf dem Gerät zu speichern. Daten, die nur für den Nutzer relevant sind, würde ich auf jeden Fall auf dem Gerät ablegen.

Um den Fragenkatalog einfacher erweitern zu können und globale Nutzerstatistiken o.ä. zu erfassen und zu teilen, wäre es sinnvoll, eine zentrale Datenbank einzusetzen, die über eine Web API gesteuert werden kann.

Wie könnte zufällig eine noch nicht beantwortete Frage gestellt werden?

Sammle alle unbeantworteten Fragen in einer Liste und erstelle einen Zufallsindex. Ob eine Frage bereits beantwortet wurde oder nicht, kannst du auf verschiedene Art und Weise markieren.

Du könntest bspw. zu Beginn ein Set (z.B. 50 Fragen) von der Web API anfordern und lokal sichern. Jede beantwortete Frage wird gelöscht. Nach jedem Löschvorgang holt die App eine neue Frage von der Web API und bezieht sie mit in die nächste Auswahl mit ein. Statt jedesmal eine neue Frage anzufordern, könntest du aber auch größere Pakete schnüren: Nach n gelöschten Fragen werden n neue Fragen geholt, für die Zufallsauwahl wird nur eine Teilmenge aller vorhandenen Fragen genutzt.

Damit nicht Fragen, die schon einmal gelöscht wurden, erneut heruntergeladen werden, merkst du dir die Grenzen (Indizes), die bereits angefordert wurden. Werden bei jedem Request an die API also bspw. genau 10 neue Frage angefordert, brauchst du nur einen Zähler erhöhen und kannst so beim nächsten Mal den Startindex berechnen, von wo an du Fragen haben willst:

startIndex = page * numberOfQuestionsToReceive
++page
Wie bringt man Sprachenauswahl in's Konzept?

Angenommen, es gibt eine Datenbanktabelle, wo alle Fragen gelistet sind und du unterstützt die Sprachen Deutsch und Englisch. Dann gibt es mindestens zwei Spalten. Für jede Sprache eine.

Die vom Nutzer gewählte Sprache ist Bestandteil der Anfrage an die Web API. Ein SQL-Query für die Sprache Englisch könnte so aussehen:

SELECT en FROM questions limit %numberOfQuestionsToReceive% offset %startIndex%

Mit %% habe ich an dieser Stelle einmal Platzhalter markiert.

Wie lässt man Anzeigen, wie viele hier Ja oder Nein gedrückt haben (...)?

Speichere dir einfach diesen Wert. Dies könnten zwei weitere Spalten in deiner Datenbanktabelle sein.

Wenn ein Nutzer eine Frage beantwortet hat, wird eine Anfrage an die API verschickt, den zugehörigen Wert des Eintrags um 1 zu erhöhen.

Wenn Fragen von der API angefordert werden, kommen die Statistiken mit und brauchen nur noch in irgendeiner Form dargestellt werden.

(Wie macht man sowas mit Cloud Firestore/Firebase Database)

Zu Firebase gibt es eine Dokumentation und ganz sicherlich auch viele Online-Tutorials, nach denen du nur einmal zu suchen brauchst.

Wo könnten die Fragen gespeichert werden (in App oder online Datenbank)?

Wie wäre es mit einer Mischung? Lokale Datenbank mit automatischer Aktualisierung bei vorhandener Internetverbindung, dann hat man die Vorteile beider Varianten.

Wie könnte zufällig eine noch nicht beantwortete Frage gestellt werden?

Wo soll hier die Schwierigkeit sein? Einen Zufallsgenerator gibt es in Java.

Wie bringt man Sprachenauswahl in's Konzept?

Zwei Varianten:

  1. In der Datenbanktabelle mit Fragen eine Spalte mit Sprache anlegen
  2. Normale Lokalisierung nutzen
Wie lässt man Anzeigen, wie viele hier Ja oder Nein gedrückt haben (Wie macht man sowas mit Cloud Firestore/Firebase Database)?

Zwei Spalten für die jeweiligen Anzahlen anlegen. Da sowas aber leicht manipuliert werden kann, ist das nicht unbedingt sinnvoll.