Firebase überträgt Daten nicht richtig?

  • Entweder steh ich total auf dem Schlauch oder wir reden aneinander vorbei.
    Könntest du vielleicht ein code Beispiel geben?


    Sobald ich auf Stopp drücke rufe ich die speichermethode des viewholders auf. Ja das stimmt. Damit speichere ich die Zeit. In meiner Datenbank allerdings möchte ich ja nicht die zeit speichern sondern nur die Punktzahlen die sich aus dem rang der einzelnen zeiten ergeben.
    Heißt ich kann zu dem Zeitpunkt wo ich Stopp drücke nichts speichern.


    Beispiel: Teilnehmer eins kommt im Ziel an ich drücke auf stopp. Er hat genau 5 minuten gebraucht. Jetzt kann ich allerdings noch garnichts in die Datenbank speichern weil Teilnehmer zwei und drei noch unterwegs sind. Teilnehmer drei kommt nach 7 Minuten ins Ziel. Und Teilnehmer zwei kommt nach 10 minuten ins Ziel. Jetzt erst da alle Teilnehmer gestoppt wurden kann ich sagen das Teilnehmer eins erster ist also 1 punkt bekommt. Teilnehmer zwei war letzter also bekommt er 5,7 punkte und Teilnehmer drei war zweiter und bekommt 3 Punkte.
    Erst diese Punkte können gespeichert werden. Das löse ich ja aus sobald ich auf fertig drücke.

  • Nein so funktioniert das ja auch nicht.
    Zeitberechnung wird ausgeführt, sonnst würde es ja garnichts machen.


    Du bist auf der Startseite, wählst regatta. Dann klockst du auf neue regatta. Dann fügst du beliebig viele Teilnehmer hinzu. Startest die zeit. Der timer fängt an zu zählen. Dann stoppst du die einzelnen Teilnehmer. Wenn alle gestoppt sind drückst du unten rechts auf fertig. Dann kommt ein Dialog den du bestätigen musst. Erst dann wird Zeitberechnung ausgeführt.
    Zeitberechnung ist eigentlich der falsche Begriff eigentlich beginnt da die punkte Berechnung.. Also mache aus der gestoppten zeit die zu speichernden punkte

  • In deinem fall speichert es sogar die Punktzahlen von allen Teilnehmern. Mit meinem Handy auch und am emulator auch. Wenn ich es jetzt allerdings an meinem zweithandy probiere passiert das selbe wie bei den ersten läufen. Es speichert nur einen einzigen wert

  • ja manchmal geht es aber meistens schmeißt er mich zurück auf die Seite neue Regata oder runde ohne ein die Methode zu gehen.
    Die Dialog box bekomme ich und ich sage auch ja. Aber er geht ohne in die Methode zu gehen und somit zu Speichen zurück.

    habe es eben auch ausprobiert. bei mir stoppt es



    Ich behalte momentan immer so ein bischen die datenbank im blick. Jetzt ist der fehler eben auch bei dir aufgetreten.

  • Das er mich immer wider zurück geschikt hat war wohl mein Fehler ich hatte auf der übertrageDaten() einen Brack. Und danach brach er ab.
    Ok du macht das durchlaufen der Zeitberechnen Methode erst am ende. Somit können die User auch erst am ende etwas sehen. Ich dachte das würde immer gemacht.
    Wenn das so ist macht es für mich absolut keinen sinn mehr die daten in jedem Listner immer wieder neu zu schreiben. Wenn du 10 User hast wir das auch drei mal in die DB geschrieben. Da die listner auch nicht synchron hinder einander kommen sogar wenn du in einen listner bist kommt der andere und fängt auch an zu schreiben. Mache das nicht in jedem listner sondern einfach nur in der zeitberechnen Methode für alle vorhandene Teilnehmer. Nicht im listner. Nach der Methode ist ja sowieso Schluss. Ich bin die ganze Zeit davon ausgegangen das das alles immer in der Db hast und die Teilnehmer es immer mit verfolgen können. Das Problem ist dass du das 10 mal speicherst obwohl ein mal reichen würde.

  • Da die listner auch nicht synchron hinder einander kommen sogar wenn du in einen listner bist kommt der andere und fängt auch an zu schreiben. Mache das nicht in jedem listner sondern einfach nur in der zeitberechnen Methode für alle vorhandene Teilnehmer.

    Also wenn ich das richtig verstanden habe meinst du einfach, der teil der das ganze hochläd soll auserhalb des listeners sein. Bzw am ende der Zeitberechnungs methode.
    Das hatte ich auch schonmal ausprobiert. Allerdings hab ich da wieder das Problem das es Asynchron läuft.


    Wenn ich es noch richtig weiß bekomme ich dann eine nullpointerexception. Er versucht dann als erstes die Punkte hochzuladen (welche noch garnicht ausgerechnet sind) und danach holt er sich den Yardstick und rechnet die punkte aus. Bzw würde er wollen wenn das programm weiterlaufen würde

  • 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.


  • Ich habe ein paar logs ein gefügt. Ist ein merkwürdiges verhalten.


    Eigentlich dachte ich das drei Eventlistner erstellt werden. aufgerufen wird aber nur einer .


    Siehe Bild .


    Da bin ich im Monet etwas überfragt.


    Wenn die listner nicht aufgerufen werden oder gar nicht Vorhanden sind kann deine Berechnungauch nicht stimmen . denke da waren wir beide auf dem falschen Weg.

  • Also neue hab eben rum getestet wie ein verrückter und weiß denke ich woran es liegt... ich weiß nicht wieso oder warum aber da kannst du mir eventuell weiterhelfen.


    Sobald alle Teilnehmer übertragen wurden ruft es ja die methode "regattaAbbrechen();" auf.
    Wenn ich regattaAbbrechen jetzt einfach auskommentiere werden alle Teilnehmer immer übertragen. Bei allen Handys.


    In dieser Methode habe ich das Problem das das ganze sich mehr als unsauber beendet. Kurz gesagt die Activity stürtzt da halt einfach ab.
    Das kommt durch das System.exit(0); was ich dort stehen habe.


    Ich hatte immer das Problem das es mir die alten vorhanden Daten nicht Löscht bzw ich nicht weiß wie ich sie gelöscht bekomme.


    Könnte darin der Fehler liegen? Wie bekomme ich die Activity sauber beendet sodass alle daten gelöscht sind? einfach finish(); zu sagen bringt leider nichts

  • 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?

Jetzt mitmachen!

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