Beiträge von Kurmuro

    So langsam wird es mir auch klar... Eventuell ist das echt etwas viel für den anfang


    Ich denke ich versuche es mit Firebase hinzubekommen da ich damit ja schon etwas Erfahrung habe.
    Danach kann ich mich ja immernoch mit dem Thema PHP auseinandersetzen und das fehlende wissen aufarbeiten


    Danke für eure Antworten :)

    Nur mal Interessehalber: Warum ist es schlecht die Zugangsdaten mit in den Code zu speichern? Ich dachte immer der Code wäre als APK datei nichtmehr einsichtbar...
    Der FTP Server ohne Log in wäre doch noch viel unsicherer oder? O.o


    Problem dabei nur das ich nochnichtmal Java Anständig beherrsche, da fang ich besser nicht noch mit PHP an. xD
    Wieso überhaupt so ein PHP Script? Kann man nicht einfach die Datei hochladen und fertig?
    Meine Grundgedanke war bisher: (da ich nicht weiß wie SQLite speichert nehmen wir mal textdatein) ich erstelle eine textdatei schreibe oben Version1 und unten drunter meine sachen und lade es mittels FTP hoch. Handy zwei greift auf Datenbank zu und läd sich die textdatei runter. in der app wird dann die textdatei nach den sachen durchsucht die man braucht und zusammen mit der version auf V1.2 geupdatet. danach wird es wieder hochgeladen und überschreibt meine alte datenbank einfach.


    Anscheinend vergesse ich irgendeinen Aspekt oder wozu wird dieses Script gebraucht?


    An sich würde ich dort gerne bleiben. Allerdings habe ich irgendwie angst das das ganze dort teuer werden könnte.
    Noch versuche ich diese App einfach für mich zu schreiben da es mein arbeitsleben wesentlich vereinfachen könnte (drehe durch mir den ganzen scheiß im kopf zu merken und dann dieser anfallende papierkram der anfällt und dann irgendwo verlegt wird...)
    Wenn das allerdings gut klappt werden vermutlich alle in der Firma nutzen wollen die im Außendienst tätig sind. Daher der Gedanke das ganze gleich so anzupassen das es flexibel für mehrere Benutzer funktioniert.
    Da bei uns so um die 50 Personen arbeiten kommt da einiges an daten zusammen... Nehmen wir an jeder speichert so 3 bilder am tag mit 2Mb. Damit wären die Kostenlosen 5 GB bei Firebase in 17 Tagen überschritten.

    Als erstes solltest du dich mal etwas mit dem Thema Datenbanken besonders Relationale Datendanken (SQLite) auseinander setzen.

    Das kommt definitiv allerdings hab ich gern gleich eine App um das gelernte in die Tat umzusetzen. Dafür muss ich aber wissen mit welcher Datenbank ich mich jetzt auseinander setzen muss.



    Frage zum Thema Ftp /http,https.
    Wie hast du dir es den vorgestellt mittels Ftp auf deine MySQL Datenbank auf dem Server zuzugreifen?

    Naja mehr so vermutungen wie so etwas funktioniert. Meine Grundidee bestand darin einfach alles in diese SQLite datenbank zu speichern. Diese Datei der Datenbank hätte ich dann hoch oder runtergeladen.


    So wie sich das anhört werde ich die Idee mit einem privaten Server vergessen können.
    Wie sich das anhört werde ich, ohne noch PHP zu lernen zu müssen, mir einen MySQL Datenbank Hoster suchen und werde anhand dem dann mal das alles versuchen zu lernen.



    Ein paar letzte fragen:

    • Wenn ich auf dem Handy eine SQLite Datenbank aufbaue. Und bei meinem Server eine MySQL Datenbank habe. Lässt sich das überhaupt so einfach mit Android Studio convertieren?
    • Könnt ihr mir vielleicht günsige Anbieter für eine MySQL Datenbank empfehlen?


    Auf dem Gerät selber bietet sich SQLite natürlich an (außer für Bilder und Videos).

    Wie speichere ich den nun Bilder? Einfach den Speicherort in die Datenbank eintragen und irgendwann so auslesen? So hat man doch das Problem das jeder Benutzer seine Ordner auf dem Handy durchstöbern kann und so ohne App die Bilder einfach anschaut :/


    Und wie sieht das dann mit der Online Datenbank aus? Bietet sich MySQL überhaupt an um Bilder zu speichern oder brauch ich dann noch zusätzlich einen webspace zum speichern?

    Okay also auf dem Gerät selbst eine SQLite Datenbank. Das mit den Bildern würde ich in dem Fall eventuell mit verweisen lösen, welche mir aufzeigen wo das Jeweilige bild dann zu finden ist.


    SQLite arbeitet ja wie eine tabelle, wie würde man sowas ordnen das es Struktur hat?

    Etc.


    Wie sollte sowas in tabellen form aussehen?
    Ich könnte mir das in etwa so vorstellen
    Tabelle Kunde:
    KundenId Objekte Kundennotiz. Adresse
    1. Haus1. - Straße sowieso
    2. - (string)
    3....
    Jetzt wären von oben nach unten alle kunden durchnummeriert, allerdings muss ja nicht jeder kunde nur ein Objekt haben, wie speiche ich nun haus2 und dem seine dazugehörige Adresse ab?



    Ein Update Counter zählt ja dann immer mit wenn etwas geändert wurde. Dann weiß ich zwar schonmal das ich es nicht einfach hochladen kann.
    Für das mergen selbst werde ich mir wohl eine funktion schreiben müssen die sobald die Versionsnummer nicht übereinstimmt, mir beide Datenbanken irgendwie verschmilzt oder? Klingt mega aufwendig


    HTTPS sagt mir nur soviel das sich damit sicher eine Website darstellen lässt... Also einfach gesagt ist es eine verschlüsselungsform? Bei meinem FTP Server (Filezilla) habe ich allerdings nur die Möglichkeit TLS/SLL oder SSH auszuwählen.
    Sorry kenne mich damit noch garnicht aus

    Hallo,


    Ich möchte eine App erstellen welche mir Daten zu Verschiedenen Kunden abspeichert (Anschriften, Notitzen, Offene Bestellungen, Bilder, videos etc).
    Großer Knackpunkt: Die App muss Offline Daten abrufen können, bedeutet ich muss ja immer ein abbild der datenbank local speichern (zumindest die textdateien).
    Je nachdem wie gut es sich umsetzen lässt wäre es toll wenn man in der Lage ist auch offline neue Einträge hinzuzufügen (sobald eine Internet Verbindung existiert sollen die änderungen automatisch hochgeladen werden).
    Dabei ist wieder das Problem das das ganze über mehrere Handys läuft. Je nachdem wie lange ein Handy nicht verbunden war, besitzt es eine uralte datenbank. Wie bekomme ich es hin das derweil neue einträge dadurch nicht einfach überschieben werden sondern es nur Einträge ergänzt/die datenbank Merged?


    Zudem sollte das ganze irgendwie verschlüsselt sein da es kundendaten sind... Die FTP übertragung lässt sich ja soweit ich gelesen habe via TLS verschlüsseln. Allerding die Speicherung Local? Man soll ja nur die daten sehen können für die man auch die berechtigung hat.


    Bisher habe ich nur Erfahrung mit Firebase. Wie ich gelesen habe eignet sich Firebase allerdings nicht ganz so gut um große Daten in unmengen zu speichern.


    Meine Grund Idee bestand jetzt darin einen ungenutzten Rechner in einen FTP Server zu verwandeln. Soweit getan, bisher lassen sich nun Daten vom Handy auf den Rechner schicken.


    Jetzt stellt sich mir nur die Frage wie man sowas sinnvoll umsetzt? Im Internet liest man oft von einer SQLite Datenbank? Oder doch lieber eine Hierachie Datenbank wie ich es von Firebase schon gewohnt bin? Ist mir noch recht fraglich wie man das alles generell flexibel in eine Tabelle speichern soll... Da ist mir die Hierachie doch einiges logischer xD
    Alles in eine Textdatei speichern oder mehrere unterodner?


    Wie würdet ihr das ganze angehen um allen Anforderungen gerecht zu werden?
    Ist das mit dem FTP Server überhaupt eine Sinnvolle Idee gewesen oder gibt es dafür schönere Varianten?

    Den Code von dir habe ich auch getestet allerdings funktioniert da bei mir garnichts... Einmal geht die Berechnung nichtmehr. Es trägt in die datenbank immer nur die Punktzahl 0 ein. Zudem speichert er genauso fehlerhaft wie momentan. Mal ein teilnehmer, mal zwei.. Nie alle drei.


    Ich mach jetzt die einfachste lösung. Ich lasse den bestehenden Code wie er ist. Und füge (auch wenn man es nicht machen sollte) das


    try{
    Thread.sleep(1000);
    }catch(InterruptedException e){} vor dem System.exit(0) auf... mehr als das die Activity abstürtzt kann ja nicht wirklich passieren... Unsauber aber selbst wenn würde es ja nicht stören. Dieser Fehler nervt mich jetzt schon so lang. Zumindest funktioniert es so... Never touch a runnning system :P

    Der ist dafür da um rauszufinden wie viel läufe es davor schon gegeben hat. Heißt wenn es schon zwei gibt soll der jetzige unter lauf 3 abgespeichert werden.
    Ist allerdings erstmal irrelevant da es schon bei regatta nicht geht. Wie gesagt, ich werde das mit der abfrage ob alle Spieler in der Datenbank sind mal in Angriff nehmen.


    Mal ne Frage abseits. Ich möchte sobald alle Teilnehmer übertragen wurden einen Toast angezeigt bekommen das es funktioniert hat. Jetzt beendet mir das System.exit allerdings direkt den Toast. Heißt er wird nicht angezeigt. Gibt es da eine möglichkeit das zu umgehen?
    Hab da schon was gefunden: https://stackoverflow.com/ques…e-never-goes-away#5420929 allerdings wird der Toast bei mir trotzdem nicht angezeigt.


    Am einfachsten wäre es vermutlich auf das System.exit zu verzichten. Dann könnte ich mir auch die abfrage sparen ob alle teilnehmer übertragen wurden.
    Bekanntes problem: Wenn ich es weglasse habe ich ja das Problem das in der nächsten regatta die letzten werte noch vorhanden sind und ich erst die alten zeiten manuell löschen muss.
    Allerdings hab ich keine Ahnung wie ich meinen Viewholder leer bekomme

    Es würde ein listner reichen der dir alle Daten der User holt und zwar alle die an der Regatta teil genommen haben auf einmal.

    Genau das habe ich ja in bei der neuen Version gemacht. Den Listener hatte ich ja nur erstellt damit ich den Yardstick der einzelnen Teilnehmer bekomme.
    Da ich in der onCreate methode sowieso einen Listener habe der aus der Datenbank ausließt welche benutzer es gibt habe ich dort einfach gesagt er soll mir zusätzlich noch den Yardstick abspeichern. Ich hätte mir auch wie du sagst einmal alle Werte nach dem Dialog bestätigen holen können aber es stört ja nicht wenn ich es direkt ganz am anfang mache.
    So habe ich das beides gleich kombiniert. Dadurch erstelle ich in der Zeitberechnungs methode keine 3 oder 10 Listener, sondern nutze einen sowieso schon vorhanden.



    Nun kannst du rechnen und jedem seine Punkte dazu zählen und wider Speichen. Mache das alles in einem listner. Danach kannst du die activity verlassen beenden.

    Macht der jetzige Code ja. Er rechnet sofort die Punktzahl aus, den Yardstick dafür hat er schon seit erstellen der Activity. Ganz ohne Listener in der Methode.

    Da sind wir wider bei meinen schon genannten if. Was du nicht beachten wolltest.

    Nicht verstanden habe* xD


    Denn gleich nach dem Speichen der Daten im listner beendest du die activity. Somit gaben die anderen listner keine Chance mehr dann zu kommen. Weil die activity ist nach dem ersten listner beendet.

    Das leuchtet mir ein. Dann müsste es doch allerdings mit dem geänderten Code gehen, schließlich werden in der methode selbst keine Listener mehr benötigt oder?

    Oder du lässt dir etwas einfallen woran du erkennst das alle Lister fertig waren aufgerufen wurden gespeichert haben und nur dann kannst du die activity beenden.

    Ist warscheinlich nicht die schönste variante aber die Idee ist gut. Ich müsste ja nur eine abfrage machen ob von 3 Benutzern alle 3 in der Datenbank sind und erst wenn das Passiert ist beendet sich das Programm. Das probiere ich mal demnächst aus.

    Hab jetzt auch ein paar Logs eingefügt. Einmal hier im Code. und einmal in der RegattaAbbrechen funktion.


    Java
    //bei neue Regatta
                                    if(auswahl.equals("Neue Regatta")){
                                        for (String key : alleUser.keySet()) {
                                            mDatabase.child("regatten").child(Integer.toString(regatten+1)).child("1").child(key).setValue(alleUser.get(key));
                                            Log.i("Test", alleUser.get(key).toString());
                                        }
                                        regattaAbbrechen();
                                    }

    An dieser stelle gibt es mir immer dann wenn es die Daten übertragen hat die Punktzahl im log aus.


    Einmal mit System.exit(0):
    Es schreibt mir kurz alle drei Werte in den Log. Die App Stürtzt ab. In der Datenbank selbst ist gerade mal ein wert angekommen.


    Ohne System.exit(0):
    Es schreibt mir dauerhaft alle drei Werte in den Log. In der Datenbank kommen alle werte an.


    Es muss ohne zweifel daran liegen.


    Dann habe ich das Problem das bei einer weiteren Regatta noch die alten zeiten der Teilnehmer vorhanden sind und manuell gelöscht werden müssen

    Allerdings habe ich dazu schon damals ewig recherchiert und nichts gefunden. Ich muss ja irgendwie alle Instanzen der Benutzer löschen. Fällt dir dazu eventuell ein Lösungsvorschlag ein?

    Habe mittlerweile ein paar mal getestet. Wenn ich in der regattaAbbrechen() methode das System.exit(0); weglasse, tritt kein fehler mehr auf. wenn ich es wieder hinzufüge hab ich den fehler wieder.


    Hinfurz von mir... Die Datenbank funktioniert ja nicht Synchron. Durch dieses System.exit(0); passiert ja bei mir nicht anderes als das die app bzw die activity abstürtzt. Was wenn es dadurch abstürtzt noch bevor alle Daten übertragen werden konnten?


    Wenn ich es weglasse funktioniert es ja. Soweit prima. Dann habe ich das Problem das bei einer weiteren Regatta noch die alten zeiten der Teilnehmer vorhanden sind und manuell gelöscht werden müssen. Wie erreiche ich es das ich meinen Viewholder komplett zurücksetzen kann?

    Ich brauche dort ja auch nichts lesen.
    Ich habe mir jetzt einfach eine Map erstellt in welche es mir alle yardsticks der benutzer reinspeichert.
    Das Passiert in der onCreate methode. Da rufe ich eh schon einmal meine datenbank auf von dem her macht es ja keinen unterschied.


    Der einzigste unterschied ist jetzt das ich mir den Listener dort in der Zeitmethode spare.
    Man sieht auch im Debugger das es die werte alle hat. also müsste es ja auch so gehen

    Also ich habe jetzt einfach mal den Listener in der Zeitberechnung entfernt(der Yardstick wird jetzt sobald eine regatta gestartet wird direkt am anfang gespeichert)
    Trotzdem tritt der Fehler noch auf.
    Jetzt gibt es keinen Listener mehr der das ganze verhindern kann. Trotzdem ist es wieder so das es im Debugger einwandfrei funktioniert und ohne trägt es wieder nur eine einzige Person ein.


    Da hatte ich ihn entfernt

    Das mit den Listenern ist ein Thema wo ich noch nicht so ganz verstehe bzw ich mich noch schlau lesen muss. Allerdings da es wenn regattaAbbrechen auskommentriert ist immer einwandfrei geht kann es damit ja vermutlich nicht zusammenhängen.. Sehe ich das falsch?