I'm trying to add an intem to my arrayList when there new values added on my firebase database using this peace of code THIS IS A SAMPLE CODE ( the error happens when you click on send button ):
ref.addChildEventListener(object : ChildEventListener {
override fun onCancelled(p0: DatabaseError) {
}
override fun onChildMoved(p0: DataSnapshot, p1: String?) {
}
override fun onChildChanged(dataSnapshot: DataSnapshot, p1: String?) {
}
@SuppressLint("LongLogTag")
override fun onChildAdded(dataSnapshot: DataSnapshot, s: String?) {
val newMSG: Messages? = dataSnapshot.getValue(Messages::class.java)
val myrv = findViewById<RecyclerView>(R.id.msgRV)
name = dataSnapshot.child("name").value.toString()
muid = dataSnapshot.child("muid").value.toString()
time = dataSnapshot.child("time").value.toString()
message = dataSnapshot.child("message").value.toString()
var contained = false
messagesArrayList.forEach{ contained = it.time !=time}
if (messagesArrayList.isNotEmpty() && contained){
messagesArrayList.add(Messages(newMSG?.name, newMSG?.mUID, newMSG?.time, newMSG?.message)) // The error is pointing here
messagesArrayList = messagesArrayList.sortedWith(compareBy { it.time }) as MutableList<Messages>
val myModulesAdapter = MessageRV(this@MessageActivity, messagesArrayList)
myrv.layoutManager = GridLayoutManager(this@MessageActivity, 1)
myrv.adapter = myModulesAdapter
myrv.scrollToPosition(myModulesAdapter.itemCount - 1)
}
}
override fun onChildRemoved(p0: DataSnapshot) {
}
})
But i got this error :
E/AndroidRuntime: FATAL EXCEPTION: main Process: com.medanis.medmax, PID: 3533 java.lang.UnsupportedOperationException at java.util.AbstractList.add(AbstractList.java:153) at java.util.AbstractList.add(AbstractList.java:111) at com.medanis.medmax.messages.MessageActivity$onCreate$3.onChildAdded(MessageActivity.kt:148) at com.google.firebase.database.core.ChildEventRegistration.fireEvent(com.google.firebase:firebase-database@@19.3.0:79) at com.google.firebase.database.core.view.DataEvent.fire(com.google.firebase:firebase-database@@19.3.0:63) at com.google.firebase.database.core.view.EventRaiser$1.run(com.google.firebase:firebase-database@@19.3.0:55) at android.os.Handler.handleCallback(Handler.java:907) at android.os.Handler.dispatchMessage(Handler.java:99) at android.os.Looper.loop(Looper.java:223) at android.app.ActivityThread.main(ActivityThread.java:7478) at java.lang.reflect.Method.invoke(Native Method) at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:549) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:941)
Can anyone tell me what went wrong? How can I fix it?
NOTE : your database must be structred like this: Messages/MoIfH0sbt2UjJj7yozXRQF72RgK2/w691O35sZ2hvDpkTbAnm6aaTjZj1/ then a value of time in this format yyyyMMddHHmmss the Message Model content
SOLLUTION: Thanks to @Slaw and @AlexMamo, i solved the problem by changing { as MutableList } to { .toMutableList() }
(name, muid, time, message)