我正在构建一个Android应用,用户需要在其中选择昵称。现在,两个用户不能拥有相同的昵称。我在.net上看过表单,我们可以在用户输入或使用Ajax调用按Tab键时验证特定用户名的可用性。
我的问题是 - 就像Android可用的那样。我可以动态查询我的服务器并验证昵称的可用性。
非常感谢您的回复。如果我需要查看任何教程,示例或Android文档参考,请指导我。
答案 0 :(得分:3)
你可以在指定输入组件(EditText
等)的每个按键事件中使用当前输入的用户名查询服务器的用户数据库,但这可能是网络密集型的产生了很多线程来处理:
TextWatcher
或用户输入其姓名的任何内容中添加EditText
onTextChanged
方法中,您将生成一个线程来联系您的CharSequence
值发送的数据库。你的服务器的响应会输出一些JSON,可能带有一个布尔属性,表示用户名是否可用或......
...或
当您启动应用程序时(就在他们必须选择名称之前),请联系您服务器的数据库并向应用程序发送一个包含已经采取的名称列表的响应。
通过这种方式,您可以轻松检查手机上是否在本地拍摄名称,而不是发送检查请求。在将昵称保存到服务器端之前,您仍必须始终检查昵称的可用性
编辑: 我已经实现了#2,这似乎是大多数应用程序为注册一个唯一名称所做的事情(我见过)
#1的问题 - 用户输入1个字母(网络线程已启动) - 用户输入另一个字母(另一个线程启动) - 用户输入第3个字母(另一个帖子) - 线程2首先完成,名称有效,通知用户 - 线程1完成,名称无效,通知用户 - 线程3完成,名称无效,用户被通知
线程2耗时4秒 线程1耗时5秒 线程3耗时5秒
假设用户输入了25个字母,如果名称有效,则有很多必须跟踪的内容,是否以及哪些线程仍在运行等等
对于这样一个简单的注册任务来说,这种方法似乎有点过于繁琐,太麻烦了
<#>#3的问题 - 需要向服务器提供1个额外的网络请求我喜欢这种方法,因为您可以轻松快速地通知用户他们的名字是否可用而没有任何线程(取决于您的用户列表的大小)或担心需要多长时间来检查
数字2简单,容易,并且有机会只需要1个服务器请求