0

这是我登录活动中的代码

我不断收到Operator == cannot be applied to Database reference 和 String,我做错了什么。我试图让用户根据他们的 type="1","2","3" 进行不同的活动。但是,不断遇到这个以粗体突出显示的问题。有人可以帮我解决它。

我是一个完全的新手,无论是 firebase 还是 kotlin。

private fun performLogin() {
        val email = email_edittext_login.text.toString()
        val password = password_edittext_login.text.toString()
        val uid = FirebaseAuth.getInstance().uid

        if (email.isEmpty() || password.isEmpty()) {
            Toast.makeText(this, "Please enter your email/password", Toast.LENGTH_LONG).show()
            return
        }
        Log.d("LoginActivity", "Attempt login with email/pw: $email/xxx")
        FirebaseAuth.getInstance().signInWithEmailAndPassword(email, password)
                .addOnCompleteListener {
                    if (!it.isSuccessful) return@addOnCompleteListener

                    Log.d("Login", "User successfully logged in: ${it.result!!.user!!.uid} $email")
                    if(ref.child("users").child("type") == "1"){
                        val intent = Intent(this, DashBoardActivity::class.java)
                        intent.flags = Intent.FLAG_ACTIVITY_CLEAR_TASK.or(Intent.FLAG_ACTIVITY_NEW_TASK)
                        startActivity(intent)
                    }else if(ref.child("users").child("type") == "2"){
                        val intent = Intent(this, DashBoardActivity::class.java)
                        intent.flags = Intent.FLAG_ACTIVITY_CLEAR_TASK.or(Intent.FLAG_ACTIVITY_NEW_TASK)
                        startActivity(intent)
                    }else if(ref.child("users").child("type") == "3"){
                        val intent = Intent(this, DashBoardActivity::class.java)
                        intent.flags = Intent.FLAG_ACTIVITY_CLEAR_TASK.or(Intent.FLAG_ACTIVITY_NEW_TASK)
                        startActivity(intent)
                    }
                    
                    
                
                }

这是我的注册活动代码和我的用户类以及保存到 firebase 数据库中的数据

private fun saveToFirebaseDatabase(){
        val uid = FirebaseAuth.getInstance().uid ?: ""
        val ref =  FirebaseDatabase.getInstance().getReference("/users/$uid")

        val user =  User(uid,
                    Fname_edittext_register.text.toString(),
                    Lname_edittext_register.text.toString(),
                    mobile_edittext_register.text.toString(),
                    dob_edittext_register.text.toString(),
                    email_edittext_register.text.toString(),
                    type = "1"
                    )

        ref.setValue(user)
            .addOnSuccessListener {
                Log.d("Register","user information saved into firebase database")
                val intent = Intent(this, DashBoardActivity::class.java)
                intent.flags=Intent.FLAG_ACTIVITY_CLEAR_TASK.or(Intent.FLAG_ACTIVITY_NEW_TASK)
                startActivity(intent)
            }
            .addOnFailureListener(){
                Log.d("Tag", "failed to set value to database: ${it.message}")
            }


    }

`
   class User(val uid: String,
           val Firstname:String,
           val Lastname:String,
           val Mobile:String,
           val Dateofbirth:String,
           val email:String,
           val type: String
){
    constructor() : this("", "", "","","","", "")
}`
4

1 回答 1

0

您收到以下错误:

运算符 == 不能应用于数据库引用和字符串

因为您正在尝试比较两种完全不同类型的对象:

ref.child("users").child("type") == "1"

左侧的对象是 DatabaseReference 类型的对象,而右侧是 String。这些对象永远不会相等。如果您想将数据库中“type”属性的值与“1”进行比较,那么您应该附加一个侦听器并读取该特定值,然后立即进行比较,如我在以下帖子中的回答中所述:

如何将多种类型的用户重定向到各自的活动?

于 2021-02-02T16:11:15.123 回答