aky
aky

Reputation: 83

how to update an entry Firebase realtime database -code in Kotlin

I am using Adroid Studio and coding in Kotlin (must be in Kotlin, I don't know how to convert Java to Kotlin and I am new to Kotlin) to store and update some data in Firebase Realtime Database.

The database looks like this:

json data

I would like to update Locker's available field to 0, for example in the database. Currently it is 1 as can be seen from JSON.

The code I have written so far looks like this.

 val reference = firebaseDatabase.getReference("Locker")
        val addValueEventListener = reference.addValueEventListener(object : ValueEventListener {
            override fun onCancelled(error: DatabaseError) {
                Toast.makeText(
                    this@LoanActivity,
                    "Failed to reach database: $error!",
                    Toast.LENGTH_LONG
                ).show()
            }

            override fun onDataChange(data: DataSnapshot) {
                val lockers = mutableListOf<Locker>()
                data.children.forEach { child ->
                    val locker = child.getValue(Locker::class.java)
                    if (locker != null && locker.available==1) {
                        lockers.add(locker)
                        Log.d("LOCKER", "name:"+locker.name+" key="+child.key)
                    }
                }
                //Update a locker in the lockers list created above
                //i.e. make locker.available = 0
                //???

Upvotes: 0

Views: 2013

Answers (1)

aky
aky

Reputation: 83

I made it work:

override fun onDataChange(data: DataSnapshot) {
                val lockers = mutableListOf<Locker>()
                data.children.forEach { child ->
                    val locker = child.getValue(Locker::class.java)
                    if (locker != null && locker.available==1) {
                        lockers.add(locker)
                        Log.d("LOCKER", "name:"+locker.name+" key="+child.key)

                        var dr  = reference.child(child.key.toString())
                        //create a brand new locker
                        var thelocker = Locker(
                            locker.name,
                            locker.day,
                            locker.month,
                            locker.year,
                            0,
                            locker.zip,
                            locker.RenterEmail,
                            locker.LoanerEmail,
                            locker.rOrl,  //rent or loan
                            locker.lat,
                            locker.longt
                        )
                        dr.setValue(thelocker)
                    }

                }

Upvotes: 1

Related Questions