Reputation: 33
So, my app does is a QR code scanner that adds the QR id to the current user UID. I first verify if the user already did that scan; if not, that id is added to the firebase table; otherwise, it will create that table. This is my code:
private fun infoAdd(str2: String, view: View) {
val currentUser = auth.currentUser?.uid
val postReference = FirebaseDatabase.getInstance().getReference("organsUsers")
val dbView = postReference.child(currentUser.toString())
val postListener = object : ValueEventListener {
override fun onDataChange(snapshot: DataSnapshot) {
val org = snapshot.child("uOrgans")
if (org != null) {
val post = org.getValue(String::class.java)
dbView.child("uOrgans").setValue("$post,$str2")
} else {
dbView.child("uOrgans").setValue(str2)
}
}
override fun onCancelled(databaseError: DatabaseError) {
}
}
dbView.addValueEventListener(postListener)
}
The str2 it's the string of the QR id.
This is what happens to Firebase:
Please Help!!!!
Upvotes: 0
Views: 76
Reputation: 138824
I first verify if the user already did that scan; if not, that id is added to the firebase table; otherwise, it will create that table.
It doesn't make any sense because in both cases you are "setting" the value of str2
into the database, that's why you see that behavior of highlighting that operation in yellow. Because a Firebase Realtime Database is a NoSQL database and is structured as pairs of keys and values, every node is a Map, which means that when using a setValue() operation, the old value is replaced with the new one.
If you want to check if the value of uOrgans
exists, then update it for example, please use the following lines of code:
val uid = FirebaseAuth.getInstance().currentUser!!.uid
val rootRef = FirebaseDatabase.getInstance().reference
val uidRef = rootRef.child("organsUsers").child(uid)
val valueEventListener = object : ValueEventListener {
override fun onDataChange(snapshot: DataSnapshot) {
val org = snapshot.child("uOrgans")
if(org.exists()) {
val post = org.getValue(String::class.java)
dbView.getRef().updateChildren(mapOf("uOrgans" to "$post,$str2")) //Update it
Log.d("TAG", $post,$str2)
} else {
uidRef.child("uOrgans").setValue(str2)
}
}
override fun onCancelled(databaseError: DatabaseError) {
Log.d("TAG", databaseError.getMessage()) //Don't ignore potential errors!
}
}
uidRef.addListenerForSingleValueEvent(valueEventListener)
If doesn't exist, the str2
is added to the database.
One thing to mention, if uOrgans
doesn't exist, none of its parents (organsUsers and the UID) nodes will not exist.
Upvotes: 1