Du konnte Abfrage des Servers Datenbank des Benutzers mit den aktuell eingegebenen Benutzername bei jedem Tastendruck-Ereignisse für die angegebene Eingabekomponente (EditText
, usw.), aber das könnte ziemlich Netzwerk intensiv sein und viele Threads erzeugen zu handhaben:
- einen
TextWatcher
auf Ihre Eingabe hinzufügen EditText
oder was auch immer der Benutzer seinen Namen in
- im
onTextChanged
Verfahren eintritt, würde laichen Sie einen Thread Ihre Datenbank kontaktieren entlang der CharSequence
Wert sendet. die Antwort von Ihrem Server würde etwas JSON vielleicht mit einer booleschen Eigenschaft ausgeben, die sagt, ob der Benutzername verfügbar ist oder nicht
- Benutzer Hits "ok" und erwartet, dass ihr Name für sich selbst registriert werden. eine abschließende Prüfung vorgenommen werden muss, bevor sie diesen Spitznamen tatsächlich bekommen, da die Verfügbarkeit seither geändert haben
oder ...
- let (sagen wir eine Tonne von Menschen auf einmal registrieren) Geben Sie den gewünschten Namen ein
- Lassen Sie sie "Speichern" oder "Registrieren"
- zu diesem Zeitpunkt, senden Sie die Registrierungsdaten und speichern Sie sie in der Datenbank, wenn ihr Name verfügbar ist. andernfalls lassen den Benutzer wissen, dass dies nicht der Fall, und sie müssen wieder
oder ...
versuchen, wenn Sie startet App (rechts, bevor sie einen Namen wählen müssen), wenden Datenbank des Servers und senden die App eine Antwort mit einer Liste von Namen, die bereits vergeben sind.
Auf diese Weise können Sie leicht überprüfen, ob der Name lokal auf dem Telefon genommen wird, anstatt eine Anfrage zu senden.
Sie müssen noch immer überprüfen die Verfügbarkeit des Spitznamen rechts, bevor es auf der Serverseite
Speichern edit: Ich habe implementiert # 2, die wie das scheint das, was die Mehrheit der Anwendungen eine einzigartige tun für die Registrierung Name (das gesehen ive)
Problem mit # 1 - Benutzer gibt in 1 Buchstaben (Netz Thread gestartet) - Benutzer Kraftspender einen weiteren Brief (ein anderer Thread gestartet) - Benutzer gibt einen dritten Brief (ein anderer Thread) - Thread 2 endet zuerst, Name ist gültig, Benutzer wird benachrichtigt - Gewinde 1 beendet ist, Name ungültig ist, Benutzer mitgeteilt wird - Gewinde 3 endet, Name ungültig ist, wird Benutzer
benachrichtigt
Gewinde 2 dauerte 4 Sekunden Gewinde 1 5 Sekunden 3 5 Sekunden
nahm Gewinde nahm
sagen Benutzer schreibt für 25 Buchstaben, es gibt eine Menge, die Sie verfolgen müssen, wenn der Name gültig ist oder nicht, wenn und welche Threads noch laufen, etc.
dieser Ansatz scheint ein bisschen zu langweilig für solch eine einfache Registrierung Aufgabe, zu viel Ärger
- erfordert 1 zusätzliche Netzwerkanforderung an den Server
Ich mag diesen Ansatz, weil Sie den Benutzer einfach und schnell benachrichtigen können, wenn sein Name ohne Threading verfügbar ist (abhängig davon, wie groß Ihre Benutzerliste ist) oder sich Gedanken darüber, wie lange es dauern wird,
Nummer 2 ist einfach, leicht, zu überprüfen und die Möglichkeit, nur 1 Serveranfrage
vielen dank für Ihre Antwort haben zu verlangen. Sie haben so ziemlich alles aufgelistet, was ich habe. Du hast recht mit dem ersten. Dies ist der ziemlich netzwerkintensive. Aber aus zweiter und dritter, welcher ist besser. Haben Sie jemals diese Art von Funktionalität implementiert? Wenn ja, können Sie bitte mehr über das Leistungsproblem erfahren. Danke noch einmal. – SaKet