我正在构建一个 Android 应用程序,用户需要在其中选择一个昵称。现在,两个用户不能有相同的昵称。我在 .net 上看到过表单,我们可以在其中验证特定用户名的可用性,同时用户使用 Ajax 调用键入或按下选项卡。
我的问题是 - 是否有适用于 Android 的类似内容。我可以即时查询我的服务器并验证昵称的可用性吗?
非常感谢您的回复。如果我需要查看任何教程、示例或 Android 文档引用,请指导我。
最佳答案
您可以在指定输入组件(EditText
等)的每个按键事件中使用当前输入的用户名查询服务器的用户数据库,但这可能很不错网络密集并产生大量线程来处理:
- 将
TextWatcher
添加到您的输入EditText
或用户输入他的名字的任何地方 - 在
onTextChanged
方法中,您将生成一个线程来联系您的数据库并发送CharSequence
值。来自您的服务器的响应将输出一些 JSON,可能带有一个 bool 属性,该属性表明用户名是否可用 - 用户点击“确定”并希望自己的名字被注册。在他们真正获得这个昵称之前需要进行最后的检查,因为可用性可能已经改变(比如很多人同时注册)
或者……
- 让用户输入他们想要的名字
- 让他们点击“保存”或“注册”
- 此时,发送注册数据并将其保存在数据库中(如果他们的名字可用)。否则,让用户知道它不是,他们必须重试
或者...
当你的应用程序启动时(就在他们必须选择一个名字之前),联系你的服务器的数据库并向应用程序发送一个包含已被使用的名字列表的响应。
通过这种方式,您可以轻松地检查姓名是否在手机上本地使用,而不是发送检查请求。
在将昵称保存到服务器端之前,您仍然必须始终检查昵称的可用性
编辑: 我已经实现了#2,这似乎是大多数应用程序为注册唯一名称(我见过的)所做的事情
#1 的问题 - 用户输入 1 个字母(网络线程启动) - 用户输入另一个字母(另一个线程开始) - 用户输入第三个字母(另一个线程) - 线程 2 首先完成,名称有效,通知用户 - 线程 1 结束,名称无效,通知用户 - 线程 3 结束,名称无效,通知用户
线程 2 耗时 4 秒 线程 1 耗时 5 秒 线程 3 用了 5 秒
假设用户一直输入 25 个字母,您必须跟踪很多术语,如名称是否有效、线程是否仍在运行以及哪些线程仍在运行等
这种方法对于这么简单的注册任务来说似乎有点太繁琐了,太麻烦了
#3 的问题 - 需要向服务器发出 1 个额外的网络请求
我喜欢这种方法,因为您可以轻松快速地通知用户他们的名字是否可用,而无需任何线程(取决于您的用户列表有多大)或担心检查需要多长时间
数字 2 简单、容易,并且有机会只需要 1 个服务器请求
关于Android - Ajax 样式自动检查用户名可用性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4494241/