вы могли бы запрашивать базу данных пользователей вашего сервера с указанным в настоящее время именем пользователя для каждого события нажатия клавиши для указанного компонента ввода (EditText
и т. Д.), Но это может быть довольно интенсивно в сети и порождать многопотоков для обработки:
- добавьте
TextWatcher
к вашему вводу EditText
или что бы пользователь ни вводил свое имя в - в методе
onTextChanged
, вы бы породилипоток для связи с вашей базой данных, отправляющий вдоль значения CharSequence
.ответ от вашего сервера будет выводить некоторый JSON, возможно, с логическим свойством, которое говорит, доступно ли имя пользователя или нет - пользователь нажимает «ок» и ожидает, что его имя будет зарегистрировано для себя.окончательная проверка должна быть сделана до того, как они действительно получат этот псевдоним, поскольку доступность могла измениться с тех пор (скажем, тонна людей регистрируется сразу)
или ...
- пусть пользователь наберет желаемое имя
- разрешит ему нажать «сохранить» или «зарегистрировать»
- на этом этапе, отправит данные регистрации и сохранит их в базе данныхесли их имя доступно.в противном случае дайте пользователю знать, что это не так, и он должен повторить попытку
или ...
при запуске приложения (непосредственно перед тем, как ему нужно будет выбрать имя), свяжитесь сбазы данных вашего сервера и отправьте приложению ответ, содержащий список уже занятых имен.
таким образом, вы можете легко проверить, берется ли имя локально на телефоне, вместо того, чтобы отправлять запрос на проверку.
вы все равно должны всегда проверять доступность псевдонима прямо перед сохранением его на серверной стороне.
edit: я реализовал # 2, что, похоже, то, что делает большинство приложений длярегистрация уникального имени (которое я видел)
проблема с # 1 - пользователь вводит 1 букву (сетевой поток запущен) - пользователь вводит другое письмо (другой поток запущен) - пользователь вводит 3 букву (другой поток)- поток 2 заканчивается первым, имя корректно, пользователь уведомлен - поток 1 заканчивается, имя недействительно, пользователь уведомлен - поток 3 заканчивается, имя недействительно, пользователь уведомлен
поток 2 занял 4 секунды поток 1заняло 5 секунд, поток 3 занял 5 секунд
скажем, пользователь продолжает набирать 25 букв, есть много вещей, которые вы должны отслеживать в терминах, если имя является действительным или нет, если и какие потоки все еще работают,etc
этот подход кажется слишком утомительным для такой простой задачи регистрации, слишком много хлопот
проблема с # 3 - требуется 1 допra сетевой запрос к серверу
мне нравится этот подход, потому что вы можете легко и быстро уведомить пользователя, если его имя доступно без каких-либо потоков (в зависимости от размера вашего списка пользователей) или беспокоиться о том, сколько времени это займетпроверить
номер 2 просто, легко и может иметь возможность потребовать только 1 запрос к серверу