我正在尝试用电话号码注册用户,我的目标是用户只能用一个电话号码注册,这意味着没有重复,所以在注册时我正在Firestore中读取,如果输入的号码在数据库中可用,则比显示的要多错误,否则它将注册。但是,在读取数据存储区时,什么也不会返回。同样,它没有显示任何错误提示。相同的功能在其他应用中也能正常工作。
这是代码
mFireStore = FirebaseFirestore.getInstance()
mFireStore.collection("USERS")
.whereEqualTo("Number", number.text.toString())
.get()
.addOnSuccessListener { documents ->
for (document in documents) {
if( document != null ){
Log.i("Null","Document Not null")
Toast.makeText(this,"Phone Number Already Exist",Toast.LENGTH_SHORT).show()
}else{
val OTP = Intent(this@MainActivity,OTPActivity::class.java)
OTP.putExtra("Name",NAME.text.toString())
OTP.putExtra("Number","+"+92+number.text.toString())
OTP.putExtra("Age",age.text.toString())
OTP.putExtra("District",district.text.toString())
startActivity(OTP)
}
}
}
.addOnFailureListener { exception ->
Toast.makeText(this,exception.toString(),Toast.LENGTH_SHORT).show()
}
这是我的安全规则
match /{document=**} {
allow read, write: if true;
}
答案 0 :(得分:0)
如果要查询Firestore数据库,则需要首先创建索引。通过this link,希望能达到您的目的!
答案 1 :(得分:0)
查询.whereEqualTo("Number", number.text.toString())
时,是否也要像.whereEqualTo("Number", "+"+92+number.text.toString())
一样在数字上加上+92?
答案 2 :(得分:0)
根据您的评论:
number的值为存储在数据库中的“ Number”,即03162026593
因此,当您使用以下调用时:
.whereEqualTo("Number", number.text.toString())
实际上,您传递的是数据库中的03162026593
和不是 +9203162026593
。要解决此问题,您应该改用以下查询:
mFireStore.collection("USERS")
.whereEqualTo("Number", "+92" + number)
.get()
.addOnSuccessListener(/* ... */);