无法从Firestore读取数据

时间:2020-03-21 15:27:04

标签: android firebase kotlin google-cloud-firestore

Here it is Firestore Database

我正在尝试用电话号码注册用户,我的目标是用户只能用一个电话号码注册,这意味着没有重复,所以在注册时我正在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;
}

3 个答案:

答案 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(/* ... */);