Как вернуть хэш-карту Mutablelivedata из Viewmodel

# #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)