# #android #firebase #kotlin #mvvm
Вопрос:
Я объявил хэш-карту MutableLiveData lateinit var latestMessageMapdata : MutableLiveData<HashMap<String,ChatMessage>>
Я пытаюсь вернуть хэш-карту из приведенного ниже кода
val ref = FirebaseDatabase.getInstance().getReference("/XXXXXXX/$fromId")
ref.addListenerForSingleValueEvent(object : ValueEventListener {
override fun onCancelled(databaseError: DatabaseError) {
Log.d(LatestMessagesActivity.TAG, "database error: " databaseError.message)
}
override fun onDataChange(dataSnapshot: DataSnapshot) {
Log.d(LatestMessagesActivity.TAG, "has children: " dataSnapshot.hasChildren())
if (!dataSnapshot.hasChildren()) {
isRefreshing.postValue(false)
}
}
})
ref.addChildEventListener(object : ChildEventListener {
override fun onCancelled(databaseError: DatabaseError) {
}
override fun onChildMoved(dataSnapshot: DataSnapshot, previousChildName: String?) {
}
override fun onChildChanged(dataSnapshot: DataSnapshot, previousChildName: String?) {
dataSnapshot.getValue(ChatMessage::class.java)?.let {
//LatestMessageViewModel.latestMessagesMap[dataSnapshot.key!!] = it
latestMessageMapdata[dataSnapshot.key!!]?.postValue(it)
// refreshRecyclerViewMessages()
}
}
override fun onChildAdded(dataSnapshot: DataSnapshot, previousChildName: String?) {
dataSnapshot.getValue(ChatMessage::class.java)?.let {
// latestMessagesMap[dataSnapshot.key!!] = it
latestMessageMapdata[dataSnapshot.key!!]?.postValue(it)
//LatestMessageViewModel.latestMessageMapdata. = it
}
}
override fun onChildRemoved(p0: DataSnapshot) {
}
})
Но я получаю
Unresolved reference. None of the following candidates is applicable because of receiver type mismatch:
публичный оператор fun MatchGroupCollection.get(имя: Строка): MatchGroup? определено в kotlin.text
Пожалуйста, помогите мне с этим, так как я новичок в kotlin и MVVM
Ответ №1:
Это живые данные типа HashMap<String, ChatMessage>
Таким образом, вы должны создать хэш-карту с заданной парой ключ-значение, а затем передать значение в livedata.
Например,
val chatMessageMap = HashMap<String, ChatMessage>()
chatMessageMap[key] = value
lastMessageMapData.postValue(chatMessageMap)