Beiträge von Kurmuro

    Da steige ich gerade nicht so ganz durch. Die Zeit an sich funktioniert ja. Also an dem Screenshot siehst du ja das es bei jedem Benutzer die gestoppte Zeit dann gleich anzeigt. Heißt soweit funktioniert es ja. Zusätzlich zu dem die Zeit angezeigt wird wird es ja in eine Map gespeichert. Mithilfe dieser Map wird dann Später die Zeit berechnet.
    Da ja die Zeit immer richtig angezeigt wird kann es daran ja garnicht liegen... Oder?

    System.currentTimeMillis() wird Local gemacht. Was hätte es für einen Vorteil die Serverzeit zu benutzen? Die Teilnehmer stoppen kann sowieso nur eine einzige Person später heißt das Problem mit Zeitmanipulationen vom Benutzer selbst wird nicht passieren.

    ja das habe ich schon verstanden. wird denn auch noch von wo anders estwas in die Db geschrieben.

    In dem Zusammenhang ist das das einzige wo in die Datenbank geschrieben wird.


    Es gibt noch die Funktion generell Benutzer anzulegen aber das hat absolut garnichts damit zu tun.
    In dieser Klasse werden nur diese Spezifischen werte abgerufen, verrechnet und dann in die Datenbank geschrieben.

    ok schaue ich mir an heut ist es mir zu spät.


    wo welche Adresse auf github?


    Nicht abschrecken lassen. Da das meine erste App ist ist vieles in deinen Augen wohl noch recht seltsam geschrieben xD.
    Falls irgendetwas unklar ist einfach fragen.


    Ps.: Richtig fettes Dankeschön das du dir die Zeit nimmst um mir bei dem Problem zu helfen. Hab schon so viel getestet und in google findet man nichts über so einen Fehler deshalb weiß ich mir echt nicht mehr zu helfen.

    Den ValueEventListener() benötigen wir in der Zeitberechnung um die gestoppte Zeit mit einem Benutzerspezifischen wert zu verrechnen. Heißt damit holen wir uns den dazugehörigen wert. Verrechnen ihn. Sortieren die Zeiten. Je nachdem wer erste usw. ist gibt es verschiedene punktzahlen die dann mit

    Java
    for (String key : alleUser.keySet()) {
                                            mDatabase.child("regatten").child(Integer.toString(regatten+1)).child("1").child(key).setValue(alleUser.get(key));
                                        }

    hochgeladen werden.
    Damit das für jeden Teilnehmer gemacht wird geht er dabei die gesamte Liste durch.

    Wenn es hilft könntest du dir das Projekt auf GitHub anschauen, allerdings da es mittlerweile doch recht umfassend ist, ist es wohl recht verwirrend xD.
    Der Timer ist ausschließlich dafür da die Zeit anzuzeigen, siehe oben rechts auf dem Bild. Zudem Speiern wir da die "System.currentTimeMillis()" in die variable start ab um später bei den einzelnen Teilnehmern ihre gestoppte zeit auszurechnen. Also um später einfach zu sagen wir drücken auf zeit stoppen dann wird System.currentTimeMillis() - start gemacht.

    Das Thread.sleep() war nur versehnentlich noch drin vom austesten wie man den Fehler beheben kann. Hatte die Hoffnung das die Datenbank die Teilnehmer nur nicht schnell genug abspeichern kann.
    Wie gesagt werden die Teilnehmer alle einzelt gestoppt und in eine Map gespeichert. Dann gibt es einen finish button der mit einem Dialog abfragt ob man sich sicher ist.
    Sobald man auf ja drückt wird Zeitberechnung gestartet.
    Der Dialog wird wiederum aufgerufen durch ein OnClickListener aufgerufen.

    Hallo,
    Erstmal danke für deine Antwort.
    Da ich noch recht neu in der Materie bin, bin ich mir recht unsicher ob das wirklich mit Thread gemeint ist...
    Wir benutzen einen "Timer" der unsere Systemzeit nimmt und dadurch berechnet wie viele Sekunden bisher vergangen sind.
    Das ist in meiner Sicht recht unabhängig vom Hochladen der Punkte.


    Das Grundprinzip von unserer App besteht darin Teilnehmer in eine Liste hinzuzufügen, den Timer zu starten, die Teilnehmer welche im Ziel ankommen sind zu stoppen (zeit wird in eine Map gespeichert), wenn alle gestoppt wurden wird die Zeit in punkte umgerechnet (funktioniert in dem wir alle zeiten in eine Liste einfügen und sortieren lassen), danach gehen wir die gesammte Liste durch und tragen es in die Datenbank ein. Hier der Code welcher es berechnet und dann hochladen soll.


    Hallo, ich habe folgendes Problem bei meiner App...erst einmal die grundlegende Funktion, die App soll für verschiedene Benutzer jeweils eine Punktzahl in einer Firebase Datenbank Speichern.
    Jetzt mein Problem es werden nicht immer alle Punktzahlen übertragen. Ich habe die App auf mehreren Handys ausprobiert, bei manchen geht es Problemlos bei manchen nicht (alle Android 9 und alle die selbe Appversion). Hat jemand eine Idee ob es an der App oder vlt auch an der Datenbank liegen kann? Oder wie ich diesen Fehler eingrenzen kann?...denn sobald der Debugger in Androidstudio aktiviert ist
    funktioniert alles. Ich wäre sehr Dankbar für jeden noch so kleinen Vorschlag


    MFG
    Marcel

    Code vom Adapter:

    Hallo,
    ich weiß momentan nicht mehr weiter und finde im Internet auch keine passende Lösung. Bzw weiß ich auch nicht so ganz nach was ich suchen muss.
    Hoffentlich kann mir hier einer helfen bzw einen Lösungsvorschlag geben.
    (Ist meine erste App deshalb verzeiht wenn das in euren Augen eventuell etwas wirr ist xD)


    App funktion:
    Ein Schiedsrichter wählt zwischen den vorhanden Benutzern aus welche an einem Wettlauf teilnehmen. Dann kann er die Zeit einzelner Runden stoppen. Am Ende wird geschaut welcher Teilnehmer die niedrigste runde hat (z.b. runde 3). Dann wird von allen Mitspielern die Zeit aus Runde 3 gewertet.
    Screenshot:

    Gelöst wurde das indem ich eine ListView benutze um die ausgewählten Teilnehmer anzuzeigen. Dabei gebe ich dem Adapter mit welche Benutzer alle ausgewählt wurden und deren UUI

    Java
    ListView list = findViewById(R.id.auswahlliste); 
    list.setAdapter(new MyListAdapter(Regatta.this, R.layout.regatta_items, users, usersid));


    Hatte damals eine tolle Anleitung gefunden und das hat super geklappt.
    Jetzt soll allerdings erreicht werden das falls z.b. einer zu spät kommt dieser Spieler nachträglich hinzugefügt wird, genauso sollen spieler auch entfernt werden können. Jetzt führe ich meinen oben geschriebenen Code aus, mit der geänderten user Liste.


    Wie verhindere ich das die vorherigen werde gelöscht werden?


    Ich verzweifel schon ewig an dem Problem :/
    Falls fragen offen sind einfach fragen.

    Nach sowas hatte ich glaub ich gesucht, mal reinlesen wie das funktioniert xD


    Meine Grundidee bestand darin mir die Möglichkeit offen zu lassen dem normalen Benutzer später eventuell später komplett andere Sachen anzeigen zu lassen ohne groß etwas ändern zu müssen. Sowas wie ein paar aktuelle Neuigkeiten etc, die weiß der admin ja sowieso heißt bei ihm können da ruhig knöpfe sein :P


    Aber ich glaub die Idee verwerfe ich wieder und mach es wie du meintest über die Sichtbarkeit. Hab ja genug Platz für weitere Buttons die ihm die neuigkeiten zeigen.


    Danke :D

    Wäre eine Option aber z.b. der Header zieht sich fast durch die ganze App. Bisher ist es so gelöst das ich ein header.xml erstellt hab, dieses dann in den gewünschten layouts includiert habe und in jeder dazugehörigen Activity den dazugehörigen Code einfach reinkopiert habe.
    Hat den Nachteil an sich das wenn ich am Header z.b. eine funktion hinzufügen will das in jeder einzelnen Activity ändern darf.
    Ist extrem Zeitaufwendig und fehleranfällig... nacher vergisst man es versehendlich bei Activity x von 18....


    Ich kann mir nicht vorstellen das es da keine sauberere Lösung gibt xD

    Hallo,
    ich hab eine ganz grundlegende Frage, kurz gesagt weiß ich bin sicher das es dafür eine schöne Möglichkeit gibt aber weiß nicht wie bzw weiß nichtmal nach was genau ich googlen muss...


    Je nachdem welche Rechte ein Benutzer hat soll er eine andere Startseite haben (mehr oder weniger auswahlmöglichkeiten angezeigt bekommen).
    Dafür würde ich einfach unterschiedliche Layouts nutzen und je nachdem anzeigen lassen.


    Allerdings soll jeder Benutzer unter den Buttons eine Rangliste angezeigt bekommen. Auch der Header ist bei jedem gleich bis auf das sein eigener Name angezeigt wird.
    Wär ja unschön jetzt z.b. bei der Activity für den Admin die Berechnung der Rangliste und die möglichkeiten vom Header immer in die jeweiligen Activitys der untergeordneten zu kopieren.


    Gibt es da die Möglichkeit einfach ein Layout für den Header und eins für die Rangliste zu erstellen die ich dann nurnoch auf meiner Startseite einbinden muss?


    Wie würdet ihr das machen bzw benutzen? :huh:


    Hier ein bild zur Verdeutlichung wie ich es meine:

    Hallo,


    Wie oben im Titel schon steht führt Java mir den Code falschrum aus...


    Was passiert:
    Man wählt aus einer Liste mehrere Teilnehmer aus -> addUserstoList() wird aufgerufen und die IDs der gewählten Teilnehmer werden übergeben.


    Im nächsten Schritt soll aus einer Datenbank der Name geholt werden und in eine andere Liste hinzugefügt werden.



    Wenn ich das jetzt so ausführe zeigt es mir im Logcat erst mein test2 an allerdings ist die Liste leer.
    Danach Zeigt es mir die Teilnehmer, also nachdem es die Liste ja schon erstellt hat.


    System.out: test2 []
    System.out: test1 [max muster]
    System.out: test1 [max muster, test test]
    System.out: test1 [max muster, test test, vorname nachname]


    Woran Liegt das? Und wie kann ich Java sagen das es erst die Teilnehmer in die Liste einfügt und es dann erst angezeigt wird?


    Wenn irgendwas fehlt einfach fragen :S

    Hallo,


    erstmal erkläre ich die gewünschte Funktion in meiner App:
    Also, es gibt einen Login Screen auf dem man sich anmelden kann. (Keine Möglichkeit zu registrieren, neue Benutzer werden vom Admin verwaltet)
    Jetzt soll der Benutzer je nachdem ob er Admin rechte hat die möglichkeit haben Benutzer hinzufügen/ändern/löschen zu können (wird warscheinlich an einfachsten sein in der Datenbank für jeden Benutzer ein boolean zu erstellen mit dem man dann abfragt ob Benutzer isAdmin true ist, oder gibt es eine effizientere möglichkeit?)


    Das mit dem anmelden klappt einwandfrei (bis jetzt gibt es noch keine admin abfrage, noch kann es jeder machen)
    Das erste Problem auf das ich gestoßen bin ist das sobald ich sage "mAuth.createUserWithEmailAndPassword(email, passwort);" loggt es meinen aktuellen benutzer aus und meldet sich mit dem eben erstellten Benutzer an.
    Laut Google Recherche gibt es keine möglichkeit das automatische einloggen zu verhindern, ich muss mich erneut einlogen... Um mich erneut einzulogen muss ich allerdings das Passwort mit angeben.
    Bedeutet ich müsste entweder den Admin sich jedesmal neu einloggen lassen (was bei so 50 neuen teilnehmern extrem nervig ist) oder ich muss das Passwort irgendwie bekommen.
    Problem ist nur das Firebase mir keine Möglichkeit bietet es zu bekommen..
    Ich bin das ganze jetzt so umgangen das das Passwort anfangs beim login lokal gespeichert wird. Da gibt es doch bestimmt schönere lösungsmöglichkeiten oder?


    Das nächste große Problem ist so ähnlich:
    Sobald jetzt ein Benutzer gelöscht werden soll geht er die Datenbank durch, zeigt sie an und der angeklickte Benutzer wird gelöscht...
    So die Theorie, denn man kann anscheinend nur den currentUser löschen
    Heißt ich muss mich erst mit dessen Benutzerdaten anmelden. Hier hab ich nicht die möglichkeit das passwort lokal zu speichern sondern müsste es mit in der datenbank speichern... keine gute idee wie mir scheint...


    Eine angeblich andere Möglichkeit die es eventuell gibt, es gibt die funktion mAuth.signInWithCustomToken allerdings um so einen Token zu erstellen muss man irgendwie ein admin sdk implementieren.
    Die Tutorials die es dazu gibt bringen mir nichts, da jagt ein Fehler den nächsten...
    Wobei ich mir da eh nicht sicher bin ob das am ende dann funktioniert.


    Wie würdet ihr das anstellen? (Bitte einfach erklären, bin noch recht neu in der Materie :S )