android - 通过子节点(firebase)搜索检查用户名是否存在?
问题描述
我正在创建一个带有注册活动的 android 应用程序,我能够将数据添加到我的 firebase 数据库,但我无法查询现有数据。基本上我试图做一个简单的用户名搜索,这将祝用户通知他们用户名已经存在(这样他们就可以创建一个唯一的)我确定我犯了一个简单的错误。我创建了一个单独的节点,它只是现有的用户名(不确定这是否明智,哈哈)。即使用户名存在,我的代码仍然会添加用户。在这件事上的任何帮助都会很棒!感谢大家!
我尝试使用 dataSnapshot.exists 并使用节点等(正如我之前提到的添加单独的用户名节点)
{
"all usernames" : {
"-LbEvUXcT9Mc3V7awfBz" : "qwerty",
"-LbEwLUAwQsnlwFeya5o" : "ted"
},
"users" : {
"CgnIejgGw0QvNAGbY5LWx6o17Us1" : {
"userEmail" : "ted@gmail.com",
"userName" : "ted"
}
}
}
如果我的图像没有显示我的节点设置,如上所示:
username = etUsername.getText().toString();
myRef.child("users").child("userName").equalTo(username).addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
if(dataSnapshot.exists()){
Toast.makeText(getContext(),"username Exists",Toast.LENGTH_LONG).show();
} else {
FirebaseDatabase firebaseDatabase = FirebaseDatabase.getInstance();
DatabaseReference myRef = firebaseDatabase.getReference();
String userId = mAuth.getUid();
userEmail = etEmail.getText().toString();
username = etUsername.getText().toString();
UserProfile userProfile = new UserProfile(username, userEmail);
myRef.child("users").child(userId).setValue(userProfile);
myRef.child("all usernames").push().setValue(username);
createUser();
}
}
@Override
public void onCancelled(DatabaseError databaseError) {
}
});[database structure][1]
[1]: https://i.stack.imgur.com/Xjfq5.png
解决方案
要过滤属性,您首先需要对其进行排序。您正在尝试通过以下方式做到这一点:
myRef.child("users").child("userName")
但这被直译为/users/userName
,并不存在。
/users
要根据其属性对每个子节点进行排序userName
(然后对其进行过滤),您需要:
myRef.child("users").orderByChild("userName").equalTo(username)
推荐阅读
- kotlin - 如何使用 Kotlin 样式向 CopyInWriteCollection 添加元素?
- c# - 读取 JSON 文件并在 SQL 中创建记录时出现问题
- c# - 检查网络流量 (xamarin)
- octave - 尽管使用逐元素操作,但参数不一致错误
- html - 如何使用 CSS 确保图像不超过可用浏览器高度?
- mysql - 检查是否存在多个关系的最有效方法
- vb.net - 是否有适用于 VB.Net 的 EF 6 ObjectContext / EntityObject 代码生成器与 VS 2019 兼容?
- python-3.x - Flask/Flasgger - 如果设置了 `endpoint` 参数,文档不会出现
- javascript - 如何在不冻结浏览器的情况下在网络浏览器中列出数千个/大的表情符号列表?
- javascript - 当函数位于 HTML 中的脚本内时,如何使用 TamperMonkey 覆盖变量值