【问题标题】:Firebase Realtime Database - Auto Generate Primary KeyFirebase 实时数据库 - 自动生成主键
【发布时间】:2020-04-10 01:29:52
【问题描述】:

我正在将一些数据写入 Firebase 实时数据库。

用户类

data class User(
    @Exclude var userId: String? = "",
    var username: String? = "",
    var email: String? = ""
)


编写函数

class MainActivity : AppCompatActivity() {

    private lateinit var mDatabase: DatabaseReference

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)

        mDatabase = FirebaseDatabase.getInstance().reference

        bt_register_button.setOnClickListener {
            val username = et_register_username.text.toString()
            val email = et_register_email.text.toString()

            writeNewUser("1", username, email)
        }

    }

    private fun writeNewUser(userId: String, username: String, email: String?) {
        val user = User(username, email)
        mDatabase.child("users").child(userId).setValue(user)
    }

}


使用上述方法,我可以创建一个预设 ID 为 1 的用户记录:


users
     1
          email: "bill@gmail.com"
          username: "bill"

我显然希望在创建时自动生成 Id。

我知道 push() 函数,但我不确定如何实现它。



编辑 1

谢谢,用户密钥现在被设置为用户 UID(来自身份验证):

    private fun writeNewUser(name: String, email: String?) {
        val user = User(name, email)
        mDatabase.child("Users").child(mAuth.currentUser!!.uid).setValue(user)
    }

【问题讨论】:

    标签: android firebase firebase-realtime-database


    【解决方案1】:

    只需调用push() 而不是child(userId)

    mDatabase.child("users").push().setValue(user)
    

    【讨论】:

    • 如果您使用 Firebase 身份验证,请改用 mDatabase.child("users").child(FirebaseAuth.getInstance().getCurrentUser().getUid()).setValue(user)。这会将用户存储在他们的 UID 下,这使得查找他们变得更加容易。
    • 感谢 Doug,第一个解决方案效果很好。我实际上正在使用 Firebase 身份验证,所以我现在将尝试使用 Uid。谢谢
    【解决方案2】:

    尝试使用此代码为 firebase 实时数据库创建自动生成的密钥

    使用 push()

    myRef.child(APP_TABLE).child(USER_TABLE).push().setValue(detail)
    

    使用身份验证当前 UUID 密钥

    myRef.child(APP_TABLE).child(USER_TABLE).child(FirebaseAuth.getInstance().getCurrentUser().getUid()).setValue(detail)
    

    【讨论】:

      猜你喜欢
      • 2021-07-22
      • 2022-10-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-09-02
      • 1970-01-01
      • 2010-12-21
      相关资源
      最近更新 更多