如何检查实时数据库中是否所有子项都已迭代?

问题描述 投票:0回答:1

我想确保我的用户在 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"
    }
  }
}

谢谢。

android firebase kotlin firebase-realtime-database
1个回答
0
投票

检查当前代码中是否存在的最简单方法是添加一个用于跟踪的变量:

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
,因为数据库已经处理了该检查。

© www.soinside.com 2019 - 2024. All rights reserved.