【问题标题】:Checking if username already exists gives error kotlin检查用户名是否已经存在会给出错误 kotlin
【发布时间】:2021-11-30 02:45:42
【问题描述】:

我从java翻译了下面的代码,但是我在某些地方出错,为什么会出错,我错过了一点吗?

val mQuery: Query = firestore.collection("users")
                        .whereEqualTo("nickname", mUserName)

mQuery.addSnapshotListener(object : EventListener<QuerySnapshot> {
    fun onEvent(
        documentSnapshots: QuerySnapshot,
        e: FirebaseFirestoreException?
    ) {
        for (ds in documentSnapshots) {
            if (ds != null) {
                val userName: String = document.getString("username")
                Log.d(
                    TAG,
                    "checkingIfusernameExist: FOUND A MATCH: $userName"
                )
                Toast.makeText(
                    this@SignUpActivity,
                    "That username already exists.",
                    Toast.LENGTH_SHORT
                ).show()
            }
        }
    }
})

我已经做了 2-3 天 here 描述的事情,但它一直抛出错误。事件侦听器和文档抛出错误。

【问题讨论】:

  • 我已经回答了这个问题。您得到的确切错误是什么?
  • 以红色显示“文档”对象并显示“未解析的引用”
  • 但该答案显示了如何使用 get(),而在这里您尝试收听实时更新。您想要该答案的 Kotlin 版本吗?
  • 我当然想,我在网上搜索了,但没有找到。

标签: firebase kotlin google-cloud-firestore


【解决方案1】:

我从java翻译了下面的代码

这不是将that code 从 Java“翻译”为 Kotlin 的正确方法,因为该答案提供了一种仅获取一次数据的解决方案。因此,为了能够在 Kolin 编程语言中做到这一点,请使用以下代码行:

val rootRef = FirebaseFirestore.getInstance()
val allUsersRef = rootRef.collection("all_users")
val userNameQuery = allUsersRef.whereEqualTo("username", "userNameToCompare")
userNameQuery.get().addOnCompleteListener { task ->
    if (task.isSuccessful) {
        for (document in task.result) {
            if (document.exists()) {
                Log.d("TAG", "username already exists")
                val userName = document.getString("username")
                //Do what you need to do with the userName
            } else {
                Log.d("TAG", "username does not exists")
            }
        }
    } else {
        Log.d("TAG", "Error getting documents: ", task.exception)
    }
}

【讨论】:

  • 你好,如果用户名没有注册,我应该在哪里添加我的交易?(是的,你帮了很多忙,但是由于我是新来的,当我点击那个按钮时,它会说 raise your声誉。当我的声誉上升时,我会点击您其他答案上的肯定按钮。)
  • “用户名不存在”这就是我无法进入的原因
  • 如果username不存在,则表示触发了if语句的else部分。如果你需要采取一些行动。然后在那里添加该逻辑。对吗?
  • 亲爱的 Alex,非常感谢您的回复。我赞成它。但是由于我刚刚注册,一旦我达到一定的声誉计数,系统就会开始接受我的投票。
  • 我现在明白了。对不起。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-01-28
  • 2023-03-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-05-05
相关资源
最近更新 更多