我想确保我的用户在 Firebase 实时数据库中没有特定的手机号码。
我知道如何检查其中一个人是否有使用以下代码的电话号码:
databaseReferenceUser.addListenerForSingleValueEvent(object: ValueEventListener {
override fun onDataChange(snapshot: DataSnapshot) {
if (snapshot.exists()) {
for (ds in snapshot.getChildren()) {
if (ds.child("MobileNo").getValue().toString() == binding.phoneNumberInput.text.toString()) {
ds.child("school").child(uid!!).child("schoolUid").getRef().setValue(uid)
ds.child("school").child(uid).child("timestamp").getRef().setValue(timestamp)
ds.child("school").child(uid).child("userIdForSchool").getRef().setValue(idDealerFactory)
ds.child("school").child(uid).child("schoolName").getRef().setValue(namaPerusahaan)
ds.child("school").child(uid).child("schoolCode").getRef().setValue(codeFactory)
}
}
}
}
override fun onCancelled(error: DatabaseError) {
}
})
当
for (ds in snapshot.getChildren()) { }
中的孩子都没有电话号码时,我想做点什么(创建新的个人资料)。
如何做到这一点?
我是否需要通过声明一个新的布尔变量来手动执行此操作,例如
var newPhoneNumber = False
或 Firebase 实时数据库有用于此目的的 API?
这是数据示例:
{
"student": {
"0JIuZsasu0pOgnYpZNiWg": {
"MobileNo": "0512216518",
"SchoolUid": "soiuhgOIaoefi23",
"timestamp": "65113215454565",
"userIdForSchool": "aieuhfIUoaef23244,
"schoolName": "St Josh",
"schoolCode": "SJH"
},
"Iuisefhiub45oids78BJn": {
"MobileNo": "0542657518",
"SchoolUid": "soiuhgOIaoefi23",
"timestamp": "65113215433235",
"userIdForSchool": "seiuhfIiasf89i23A,
"schoolName": "St Josh",
"schoolCode": "SJH"
},
"QPOcsiue632baifd2nkJ": {
"MobileNo": "0712218818",
"SchoolUid": "soiuhgOIaoefi23",
"timestamp": "65113215454445",
"userIdForSchool": "QOepfqjb39IKAhdai,
"schoolName": "St Josh",
"schoolCode": "SJH"
}
}
}
谢谢。
检查当前代码中是否存在的最简单方法是添加一个用于跟踪的变量:
val isFound: Boolean = false
for (ds in snapshot.getChildren()) {
if (ds.child("MobileNo").getValue().toString() == binding.phoneNumberInput.text.toString()) {
isFound = true
ds.child("school").child(uid!!).child("schoolUid").getRef().setValue(uid)
ds.child("school").child(uid).child("timestamp").getRef().setValue(timestamp)
ds.child("school").child(uid).child("userIdForSchool").getRef().setValue(idDealerFactory)
ds.child("school").child(uid).child("schoolName").getRef().setValue(namaPerusahaan)
ds.child("school").child(uid).child("schoolCode").getRef().setValue(codeFactory)
}
}
print(isFound)
如果您不需要其他用户数据,这有点浪费 - 并且随着您添加更多用户,浪费会更大。您可以使用查询仅加载该用户,而不是加载所有用户来检查某个用户是否存在。
val query = databaseReferenceUser.orderByChild("MobileNo").equalTo(binding.phoneNumberInput.text.toString())
query.addListenerForSingleValueEvent(object: ValueEventListener {
override fun onDataChange(snapshot: DataSnapshot) {
if (snapshot.exists()) {
for (ds in snapshot.getChildren()) {
ds.child("school").child(uid!!).child("schoolUid").getRef().setValue(uid)
ds.child("school").child(uid).child("timestamp").getRef().setValue(timestamp)
ds.child("school").child(uid).child("userIdForSchool").getRef().setValue(idDealerFactory)
ds.child("school").child(uid).child("schoolName").getRef().setValue(namaPerusahaan)
ds.child("school").child(uid).child("schoolCode").getRef().setValue(codeFactory)
}
...
现在代码不再需要检查
MobileNo
,因为数据库已经处理了该检查。