Insertar número entero si no existe, la subasta si ya existe en la base de datos en tiempo real Firebase Android

user3787635:

Estoy intentando generar un entero aleatorio entre 1 y 5 e introduzca el número entero en la base de datos Firebase cuando saveData()se llama por primera vez. Después de la primera vez, cuando saveData()se llama el número entero debe ser incrementado (nuevo número entero generado debe añadirse a número entero previamente insertada). Cada vez que saveData()se llama a continuación código a través escribe el número entero insertado previamente en lugar de incrementar el número entero.

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()
    }
}

User.kt

class User(val randomInt: Int)

Estructura que me estoy poniendo en la base de datos base de fuego después de saveData()que se llama para que digamos 3 veces y le dicen enteros aleatorios generados cada vez son 2, 1 y 4:

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

Mientras que yo quiero que sea:

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

Así, en pocas palabras quiero para incrementar el valor de randomIntcada saveData()se llama en lugar de sobrescribir el valor insertado anterior que está pasando con mi código actual.

Frank Puffelen:

Usted está buscando una transacción de base de datos Firebase , que es la única manera confiable para actualizar una propiedad en función de su valor existente en un entorno multi-usuario. Basado en el ejemplo en la documentación, el código debe ser algo como esto:

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);
    }

Supongo que te gusta

Origin http://43.154.161.224:23101/article/api/json?id=205454&siteId=1
Recomendado
Clasificación