gpt4 book ai didi

java - 如果不存在则插入整数,如果 Firebase 实时数据库 Android 中已存在则递增

转载 作者:搜寻专家 更新时间:2023-11-01 08:20:01 26 4
gpt4 key购买 nike

我试图生成一个介于 1 和 5 之间的随机整数,并在第一次调用 saveData() 时将该整数插入 Firebase 数据库。第一次之后,当 saveData() 被调用时,整数应该递增(新生成的整数应该添加到先前插入的整数)。每次在下面调用 saveData() 时,代码都会覆盖之前插入的整数,而不是递增整数。

protected fun saveData() {
val randomInt = Random().nextInt((5-1) + 1)//generates int between 1 & 5
val user = User(randomInt)

val currentUser = mAuth?.currentUser
val uid: String = currentUser!!.uid
val ref = FirebaseDatabase.getInstance().getReference("users").child(uid)

ref.setValue(user).addOnCompleteListener {
Toast.makeText(this,"Successful" , Toast.LENGTH_SHORT).show()
}
}

用户.kt

class User(val randomInt: Int)

调用 saveData() 后我在 firebase 数据库中得到的结构可以说是 3 次,并且可以说每次生成的随机整数是 2、1 和 4:

    my-firebase-app-5c40
|__-Lhi7dewd7878dew
|__randomInt: 4 //2 is overwritten 1 and 1 is overwritten by 4

而我希望它是:

        my-firebase-app-5c40
|__-Lhi7dewd7878dew
|__randomInt: 7 //2 + 1 + 4

所以,简而言之,我想在每次调用 saveData() 时增加 randomInt 的值,而不是覆盖我当前代码中发生的先前插入的值.

最佳答案

您正在寻找 Firebase Database transaction ,这是在多用户环境中根据属性的现有值更新属性的唯一可靠方法。根据文档中的示例,您的代码应如下所示:

val ref = FirebaseDatabase.getInstance().getReference("users").child(uid).child("randomInt")

ref.runTransaction(new Transaction.Handler() {
@Override
public Transaction.Result doTransaction(MutableData mutableData) {
Long value = mutableData.getValue(Long.class);
if (p == null) {
mutableData.setValue(1L);
return Transaction.success(mutableData);
}
else {
mutableData.setValue(value + 1);
}

return Transaction.success(mutableData);
}

@Override
public void onComplete(DatabaseError databaseError, boolean b,
DataSnapshot dataSnapshot) {
Log.d(TAG, "transaction:onComplete:" + databaseError);
}

关于java - 如果不存在则插入整数,如果 Firebase 实时数据库 Android 中已存在则递增,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52577514/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com