Я получаю коллекцию из firestore и отображаю ее в recyclerview. Коллекция небольшая, всего 2 документа с текстом менее 10 символов. Когда я показываю его в recylcerview без использования шаблонов проектирования архитектуры, он работает нормально, но если я реализую его с помощью viewmodel и livdedata, я получаю ошибку размера стека 8 МБ и app cra sh. Я искал в течение дня и не нашел ничего подходящего.
fetchNotes () вызывается неоднократно, и журналы в addOnSuccessListener () не попадают.
Я добавлю репозиторий, как только это сработает.
class HomeActivity : AppCompatActivity() {
private val fab by lazy { findViewById<FloatingActionButton>(R.id.floatingActionButton) }
private val homeAdapter by lazy { HomeAdapter(ArrayList<Note>(),this) }
private val homeRecylerView by lazy { findViewById<RecyclerView>(R.id.homerecyclerview)}
private val homeViewModel: HomeViewModel by viewModels()
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_home)
initUI()
initRecyclerView()
initViewModel()
}
private fun initViewModel() {
homeViewModel.getNotes().observe(this, Observer<List<Note>> { notes ->
homeAdapter.notes = notes
homeAdapter.notifyDataSetChanged()
})
}
class HomeViewModel : ViewModel() {
var tempList:MutableList<Note> = mutableListOf()
fun getNotes(): LiveData<List<Note>> {
return notes
}
private val notes: MutableLiveData<List<Note>> by lazy {
MutableLiveData<List<Note>>().also {
fetchNotes()
}
}
fun fetchNotes(): MutableLiveData<List<Note>> {
FirebaseUtils.db().collection("notes").document(
FirebaseUtils.auth().currentUser!!.uid
)
.collection("usernotes")
.get()
.addOnSuccessListener { documents ->
for (document in documents) {
tempList.add(document.toObject(Note::class.java))
}
notes.setValue(tempList)
}
.addOnFailureListener { exception ->
}
return notes
}