Как получить мои пользовательские данные firebase в android studio и наблюдать за ними - PullRequest
0 голосов
/ 17 апреля 2020

, чтобы дать вам пример того, что я хочу, это мой код mainViewModel перед использованием Firebase для сохранения моих данных:

package com.example.newrecyclerview
import android.util.Log
import androidx.lifecycle.viewModelScope
import kotlinx.coroutines.*
import java.lang.Exception
import androidx.lifecycle.*

class MainViewModel : ViewModel() {

    private val _listPaysLiveData = MutableLiveData(listOf(
        Pays("France", "url"),
        Pays("Allemagne", "url"),
        Pays("Italie", "url"),
        Pays("Espagne", "url")
        ))

    val searchLiveData = MutableLiveData<String>("")

    val listPaysLiveData : LiveData<List<Pays>> = _listPaysLiveData

    val filterPaysLiveData = Transformations.map(listPaysLiveData.combineLatest(searchLiveData)) {
        if(it.second.isEmpty()) it.first else {
            it.first.filter { pays -> Regex(it.second).containsMatchIn(pays.nom) }

        }
    }

    fun removePays(paysToRemove: Pays) {
        val pays = _listPaysLiveData.value ?: return
        _listPaysLiveData.value = pays.filter { it != paysToRemove }
    }

    fun onAdd(pays: Pays) {
        val addPays: List<Pays> = _listPaysLiveData.value ?: return
        _listPaysLiveData.value = addPays + pays
    }

    fun updatePays(indexToUpdate: Int, newPays: Pays) {
        val paysUpdate: List<Pays> = _listPaysLiveData.value ?: return
        _listPaysLiveData.value = paysUpdate.mapIndexed { index, basicPays -> if (index == indexToUpdate) newPays else basicPays }
    }

    fun paysFilterBack(paysNom: String) { //SEARCH BAR
        searchLiveData.value = paysNom
    }
}

fun <A, B> LiveData<A>.combineLatest(b: LiveData<B>): LiveData<Pair<A, B>> {
    return MediatorLiveData<Pair<A, B>>().apply {
        var lastA: A? = null
        var lastB: B? = null
        addSource(this@combineLatest) {
            if (it == null && value != null) value = null
            lastA = it
            if (lastA != null && lastB != null) value = lastA!! to lastB!!
        }
        addSource(b) {
            if (it == null && value != null) value = null
            lastB = it
            if (lastA != null && lastB != null) value = lastA!! to lastB!!
        }
    }
}

, а также код, позволяющий мне наблюдать за любыми изменениями и обновлять данные:

        rv_pays.layoutManager = LinearLayoutManager(requireActivity(), LinearLayoutManager.VERTICAL, false)
        mainViewModel.filterPaysLiveData.observe(requireActivity(), Observer {
            paysAdapter.submitList(it)

        })

Теперь я хотел бы иметь возможность восстановить эти данные таким же образом и также наблюдать их, но на этот раз, восстанавливая данные, которые у меня есть в моей базе данных Firebase в реальном времени. Проблема в том, что обратите внимание на эти данные, это должен быть MutableList, и я также могу применить MutableLiveData, и снова ему нужен список, до сих пор мне только удавалось имитировать это поведение, добавлять элемент в базу данных Firebase, но я никогда не мог на самом деле читать / изменять / удалять данные, включенные в Firebase, как вы думаете? всегда ли мне нужно использовать наблюдение или в этот раз будет иначе, чтобы получить то, что я хочу сделать? спасибо всем

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...