Итак, вот мое постановление проблемы
**
** Я использую MVVM с внедрением зависимостей в моемпоэтому у меня есть репозиторий, в котором я в основном извлекаю данные из firebase и возвращаю живые данные в репозиторий, но теперь я просто интегрировал базу данных комнаты в свой проект, и здесь возникает реальная проблема,
**
** Я хочу сохранить данные, поступающие с сервера, в базу данных локальной комнаты и в качествеMVVM предлагает в качестве шаблона проектирования, мне нужно для этой задачи внутри хранилища
**
** ДанныеПриходя в форму хранилища, класс firebase - это живые данные, и мне нужно сохранить эти данные в базе данных комнаты, но я не знаю, как преобразовать живые данные в ArrayList данных для хранения данных в комнате, используя класс DAO, которого я знаю. некоторые из васскажет, что заставил наблюдателя наблюдать данные в хранилище, но учтите, что я не передаю контекст хранилищу
**
**
package com.baymax.quotesapplication.data
import android.os.AsyncTask
import androidx.lifecycle.LiveData
import com.baymax.quotesapplication.data.db.QuoteDao
import com.baymax.quotesapplication.data.db.QuotesDatabase
import com.baymax.quotesapplication.data.db.entity.Quote
class QuoteRepository private constructor(private val firestoreSource: FirestoreSource,
private val database: QuotesDatabase,
private val status:String){
fun addQuotes(quote:Quote)
{
InsertNoteAsyncTask(
database.getQuoteDao()
).execute(quote)
firestoreSource.addQuotes(quote)
}
fun getQuotes():LiveData<List<Quote>>
{
if(status.equals("ONLINE"))
{
return firestoreSource.getQuotes()
}
return database.getQuoteDao().getQuotes()
}
fun deleteAllNotes() {
DeleteAllNotesAsyncTask(
database.getQuoteDao()
).execute()
}
companion object {
// Singleton instantiation you already know and love
@Volatile private var instance: QuoteRepository? = null
fun getInstance(firestoreSource: FirestoreSource,database: QuotesDatabase,status: String) =
instance ?: synchronized(this) {
instance ?: QuoteRepository(firestoreSource,database,status).also { instance = it }
}
}
private class InsertNoteAsyncTask(val quoteDao: QuoteDao) : AsyncTask<Quote, Unit, Unit>() {
override fun doInBackground(vararg quote: Quote?) {
quoteDao.addQuote(quote[0]!!)
}
}
private class DeleteAllNotesAsyncTask(val quoteDao: QuoteDao) : AsyncTask<Unit, Unit, Unit>() {
override fun doInBackground(vararg p0: Unit?) {
quoteDao.deleteAllNotes()
}
}
}
FirebaseSource
class FirestoreSource (){
private val firestore:FirebaseFirestore by lazy {
FirebaseFirestore.getInstance()
}
private val quoteList = mutableListOf<Quote>()
private val quotes = MutableLiveData<List<Quote>>()
init {
quotes.value = quoteList
}
fun addQuotes(quote:Quote)
{
val map:HashMap<String,String> = HashMap<String,String>()
map.put("Quote",quote.quote)
map.put("Author",quote.author)
firestore.collection("Quotes").add(map as Map<String, Any>).addOnCompleteListener {
quoteList.add(quote)
quotes.value = quoteList
}
}
fun getQuotes(): LiveData<List<Quote>>
{
firestore.collection("Quotes").get().addOnCompleteListener { task ->
if (task.isSuccessful)
{
quoteList.clear()
for (quote in task.result!!)
{
quoteList.add(Quote(quote.get("Quote").toString(),quote.get("Author").toString()))
}
Log.d("EVENT","Live Data is updated")
}
}
quotes.value = quoteList
return quotes
}
}