Datenbank, Suchfunktion und Einträhe in Tabellen in Kotlin.

  • Hallo ihr - ich frag einfach mal und erkläre - ich hoff ihr seid mir nicht böse das ich "noch" keine Ahnung habe von dem was ich hier versuche.


    Ich bin halt echt noch voll neu.


    Nachdem ich in meiner letzten App zwar statische Tabellen (ja, die einzigen die ich bisher kann) und auch eine Suche eingebaut habe dessen Grundlage mir eigentlich nichtmal ganz klar ist (und dennoch super funktioniert hat) - will ich das nun alles neu und mal richtig machen. Dazu brauch ich aber Hilfe. (Bitte wirkliche Hilfe für ne Anfängerin und keine dahingeworfenen "ja ist doch wohl klar" Fachbegriffe, danke ;))


    Mein Vorhaben:

    Es geht um eine App die in meinem Job hilfreich sein soll, infos beinhalten, die wir brauchen und wirklich schnell mal abfragen können.

    (Genauer gesagt: Ich arbeite in einem Verkehrsunternehmen. Die App soll Haltestellen, deren Nummern, Waben, Ticketautomatennummern und möglicherweise auch noch die Linien die an den Jeweiligen Haltestellen halten anzeichen auf unterschiedliche Weise)


    Mein Ziel ist:

    1: eine Datenbank zu bauen, in der alle Infos enthalten sind die ich brauche.

    2: eine Suchfunktion die mehrere feste Felder hat, um das Ergebnis verfeinern zu können. (Beispiel: Ich such nach einer Wabe, da tauchen 500 ergebnisse auf, die sich alle in dieser Wabe befinden, dann zusätzlich nach einer Nummer suchen, die sich in dieser Wabe befindet)

    3: Aus dieser Bibbliothek heraus Tabellen erstellen können, (die ich binher in statischen Tabellen gemacht habe) die 3 Spalten hat.


    Gibt es da jemanden der mir sagen kann, was ich dazu brauche, wie man so etwas umsetzt und vielleicht auch ein paar seltsame noop Fragen aushält? ;)


    So sehen die Tabellen bisher aus mit den nötigen Infos https://i.gyazo.com/a064be8091b7bd89cfa9720400458991.png

    So sieht die Suchabfrage bisher mit den nötigen Infos aus https://i.gyazo.com/6276621e3e85e752c14e8fa48afa0e80.png

    Danke!

  • Hallo und Willkommen im Forum.


    Wenn du so ein Projekt vor hast sollte auch erst mal etwas Planung erfolgen.

    Lassen wir erst mal die Programmierung der Oberfläche GUI beiseite.


    Du willst ein Datenbank zum Speicher der Daten.

    Was hast du da bis jetzt? An was genau hast du dabei gedacht?


    Ich gehe mal davon aus du bei diesen Projekt nicht an eine Lokal in Handy gehaltne Sqlite DB denkst.

    Sonder etwas Server basierendes. Denn es soll doch bestimmt mehren Usern zugänglich sein und wenn Änderungen kommen solle sie alle sehr Zeitnah bekommen. Vielleicht sollen auch User was ändern dürfen und nicht nur der Admin.

    Da stellt sich schon die erste Frage ein Klassische relationale DB ( MySQL …)

    oder eine NoSQL zb. (Firebase, MongoDB, …)


    Auch der zugriff auf die DB sollte überdacht werden, ein direkter zugriff auf eine mySQL auf dem Server ist aus Datenschutz nicht zu empfehlen.

    Da sollte man überlegen welches Backend API (REST) dafür man benutz.


    Auch ist es erst mal sinnvoll sich Gedanken über die DB Struktur zumachen.

    Ein DB Model entwerfen. Also Entitäten Relationen ....


    Was davon hast du bis jetzt?

  • Bisher gibt es keine DB. Zumindest keine wirkliche. Ich hab zwar etwas mit ListView gebaut mit über 1200 Einträgen. Das funktioniert auch im Grunde soweit wie es soll, nur das ich die Suchanfragen nicht verfeinern kann wie ich es gerne hätte.

    So "ungewöhnlich" das auch ist, hätte ich ganz gerne das die komplette App aber offline bleibt.

    Das hat zB den Grund, das wir die auch an Orten benutzen können müssen, an denen wir keinen Empfang haben (und davon gibt es viele). Also ist Offline mir schon recht wichtig, da es sonst wirklich oft zu Situationen kommt, indenen wie nicht mal eben nach Nummern suchen können obwohl es wichtig ist (was im Umkehrschluss bedeutet, Leute greifen wieder auf PDFs, Flyer und Zettel zurück)


    Online mit DB und Server ist zwar sehr verlocken, besonders da ich gerne den Zugang zur App mit PW und Login beschränken würde, würde aber den Nutzen schmälern.


    Ich würde auch gerne eigentlich die App - also das was ich bisher gemacht hab in meiner V1 mal zur verfügung stellen aber da sind Daten drin die ich leider nicht einfach so weiter geben kann.


    Lassen sich solche DB auch offline erstellen, das alles nötige innerhalb der App ist?

  • Natürlich kannst du in Android auch eine Offline lokale DB erstellen.


    Dad ist ja in Android schon Integriert und zwar die „SQLite“ DB.

    Wie du darauf zugreifst, das kannst direkt machen besser ist den SQLiteOpenHelper zu benutzen.

    Noch sinnvoller ist es Room zu benutzen. Das ist ein Framework API die sich auch gut in das MVVM Pattern einfügt so das du auch später leichter umstellen kannst.

    Das wird von Google auch empfohlen.

    Dies könnte was für dich sein.


    Android Room Databases



    Db offline außerhalb von Android erstellen schwierig da du sie nicht so einfach in dein Handy importieren kannst. Da die DB-Datei die erstellt wird in einen Geschützen Bereich ist in den du ohne Root Rechte nicht rankommst.


    Du könnest die Datei aber in den Assets mitgeben solltest sie aber beim ersten APP Start aus den Assets in den APP Speicher kopieren da auf die Assets nur gelesen werden kann nicht geschrieben.



    Zum Anzeigen würde ich heute nicht mehr das ListView benutzen dafür ist das RecyclerView besser geeignet auf jedenfalls performanter.

    Bei 1200 Einträgen sicherlich.

  • Zitat

    nur das ich die Suchanfragen nicht verfeinern kann wie ich es gerne hätte.

    Und da hilft dir die DB mit einer sinnvollen Abfrage bekommst du genau die Liste zurück die du haben willst.

    Das setzt natürlich eine gutes DB Model , Struktur voraus. Es wird nicht immer so sein das in der DB alles in einer Tabelle ist.

    Eine SQL Abfrage muss sich nicht auf nur eine Tabelle beziehen, Thema Joins.

    Das was du aus der abfrage zurückbekommst und in RV anzeigst muss nicht nur in einer DB Tabelle sein.

    Du wist dich sicherlich auch etwas mit SQL und DB-Strukturen beschäftigen müssen.

  • Im moment bin ich damit beschäftigt mein Chaos an Activitys (meine komplette App bestand fast ausschließlich aus aneinandergereihten Activitys) in Fragments umzubauen und neu zu gestalten um das Grundgerüst zu haben.

    Bei der DB bin ich noch unsicher - ob ich das alles so hinbekomme.

    Bei ListView sahen meine Einträge so aus:

    https://i.gyazo.com/0c180d4a6f563fa045cc468666121a8d.png

    Kann ich die Daten eigentlich irgendwie übernehmen oder muss ich alles neu Schreiben? (Wovon ich ausgehe, da die Einträge ja keine ID haben, um daraus später auch Tabellen (die sich aber nicht ändern sollen da Fahrpläne sich selten ändern) zu erstellen.

    Diese Tabellen können also am ende "Statisch" sein, Bisher hab ich wirklich jede Linie statisch geschrieben, was es aber umständlich macht, sollte doch mal eine Änderung eintreten.

  • Wenn du es mit Eine DB machst. Kommt ja die Liste aus der DB Abfrage.


    Die Liste Haltestellen könntet du aus dem Cursor den du von der DB Abfrage bekommst bilden.

    Dazu ist es sinnvoll sich erst mal mit Datenbanken und SQL zu beschäftigen wenn du es wirklich mit DB machen willst. Was ich sinnvoller finde.


    Kannst du zumindest die Grundlagen von SQL ?

  • Bei Datenbanken sollte man sich auch überlegen wie und welche Tabellen man braucht und wie die dann in Beziehung stehen müssen.

    Um Redundanzen zu vermeiden.


    Also die Entitäten und Relationen 1->1 / 1->n / m->n


    Schaue dir Tutoriell zu DB Design und SQL an.

  • Für das Erstellen der Arrayliste ohne DB hätte ich vielleicht einen Import für eine CSV Datei geschrieben.


    Die dann in den Ressourcen oder Assets mitgeben und dann zu Laufzeit eingelesen.


    Somit konntest du mit Excel die Daten erfassen daraus ein CSV Datei und die der App mitgeben.

  • Kotlin "können" ist noch zu viel gesagt, ich stolpere mich da so durch und bekomms am ende aber hin (meißt) ;)

    Im moment prügel ich mich grade mit Fragments rum die nicht ganz so wollen wie ist aber das wird schon. Wenn ich dann ein Grundgerüst hab, will ich erstmal die DB machen, zumindest mit ein paar Platzhaltern und die später dann mit Daten füllen und dann der ganze rest. Ich schau mir das CSV gleich mal an und schau was ich anstellen kann. danke dir!

  • Hallo ich habe mir den Code Von deinem ListView den du selber gesucht hast von Dezember 2022 noch mal angesehen.


    Bleiben wir bei dem Projekt.

    So du willst jetzt zb hier nach verschiedenen Eigenschaften Properties der Model Klasse Filtern.


    Zb nach der letzen Eigenschaft „region“

    So jetzt schau dir mal an was da in der Filter Klasse gemacht wird. Du

    vergleichst den Suchstring mit dem was dir toString zurück gibt. Und was ist das?

    das ist eine Serialization aller Eigenschaften.

    Du willst aber die Filterung nur nach einer Properti nicht nach allen. Also musst du der Filter Klasse erstmal miteilen nach welcher Properti du Filtern willst und dis dann an anbieten, in der Klasse.


    Klar du könnstet auch verschiene Filter klassen Schreiben und je nachdem was du suchst benutzen. Würde ich nicht machen.


    Du musst auch dem User die Auswahl geben nach welcher Properti er Filtern will.

    Du könntest die Auswahl der Klasse im Konstruktor mitgeben, oder du verschlüsselst sie in Suchstring. Das könnest du es in der toString Methode auswerten und mit dem richtigen getter antworten.

    Da ist deine Kreativität gefragt.


    Du könntest es in etwa so machen habe es nicht getestet nur im Editor geschrieben.



  • Die alten sind ja ziemlich überholt aber das einzige was ich hinbekommen hab damals. Nun will ich das alles mal "anständig" besser machen. Mir raucht ein wenig der Kopf aber ich schlag mich durch. Endlich ein Menu und Fragments eingebaut ;) Nun bin ich noch mit Text und Grafiken beschäftigt, danach gehts an die Bibliothek.

    Oh und auf die Frage - nein ich habe noch gar keine SQL erfahrung - völliges Neuland für mich. Wird also lustig, ich beiß mich da aber irgendwie schon durch. Hab ja keine Deadlein, außer "irgendwann dieses Jahr noch" wäre schön.

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!