2010-12-20 3 views
1

Ich baue eine Android-App, in der Benutzer einen Spitznamen wählen müssen. Jetzt können zwei Benutzer nicht denselben Spitznamen haben. Ich habe Formulare auf .net gesehen, wo wir die Verfügbarkeit eines bestimmten Benutzernamens überprüfen können, während der Benutzer den Tab oder den Tab mit Ajax-Anrufen drückt.Android - Ajax-Stil automatische Überprüfung der Verfügbarkeit von Nutzern

Meine Fragen ist - ist so etwas für Android verfügbar. Kann ich meinen Server im laufenden Betrieb abfragen und die Verfügbarkeit eines Spitznamens überprüfen?

Vielen Dank für Ihre Antworten. Wenn es Tutorials, Beispiele oder Android Doc-Verweise gibt, die ich mir anschauen muss, bitte führe mich dazu.

Antwort

3

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:

  1. einen TextWatcher auf Ihre Eingabe hinzufügen EditText oder was auch immer der Benutzer seinen Namen in
  2. 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
  3. 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 ...

  1. let (sagen wir eine Tonne von Menschen auf einmal registrieren) Geben Sie den gewünschten Namen ein
  2. Lassen Sie sie "Speichern" oder "Registrieren"
  3. 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

+0

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

Verwandte Themen