Я пытаюсь добавить intem в свой список массивов, когда в мою базу данных firebase добавлены новые значения, используя этот кусок кода ЭТО А КОД ОБРАЗЦА (ошибка возникает, когда вы нажимаете кнопку отправки) :
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) {
}
})
Но я получил эту ошибку:
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)
Кто-нибудь может сказать мне, что пошло не так? Как я могу это исправить?
ПРИМЕЧАНИЕ: ваша база данных должна быть структурирована следующим образом: Messages / MoIfH0sbt2UjJj7yozXRQF72RgK2 / w691O35sZ2hvDpkTbAnm6aaTjZj1 /, затем значение времени в этом формате * ModelHyMss 10 * 10mmd * MessageHyMssd * MessageHyMssd
SOLLUTION: Благодаря @Slaw и @AlexMamo я решил проблему, изменив {as MutableList} на {.toMutableList ()}
(name, muid, time, message )