Адаптер RecyclerView не загружает данные, полученные из репозитория

# #android #kotlin #google-cloud-firestore #mvvm #repository

Вопрос:

Я работаю над приложением sheduler, которое имеет firebase firestore и дизайн MVVM.Я создал репозиторий, viewmodel, класс данных «Задача», и все работает нормально, пока я не получу данные из firebase. После того, как я извлек его и установил на адаптер, ничего не отображается. Только когда я добавляю задачу с помощью жесткого кода или во время выполнения, отображаются все остальные задачи из бд

 class Task(  private var Title:String?,
         private var Description: String?,
         private var Start_Time:String?,
         private var End_Time:String?,
         var State:TaskState )


class TaskRepository {
private var mData = ArrayList<Task>()
object TasKRepo  {
    private var instance = TaskRepository()
    public fun getInstance(): TaskRepository {
        if (instance == null) {
            instance = TaskRepository()
        }
        return instance
    }
}
public fun getTasks(): MutableLiveData<List<Task>> {

    retrieveTasksfromfirebase()
   
    val newlist= MutableLiveData<List<Task>>()
    newlist.value=mData
    return newlist
}

private fun retrieveTasksfromfirebase()
{
   val firestore=FirebaseFirestore.getInstance()
    val collection=firestore.collection("Tasks")
    collection.get().addOnCompleteListener {
        if(it.isSuccessful) {
            for (document in it.result!!) {
                val task = document.toObject(Task::class.java)
                mData.add(task)
            }
        }
        else
        {
            mData.add(Task("Default Task","This is a default task","00:00:00","00:00:00",TaskState.TASK_DEFAULT ))
        }
    }

}
 

}

 class TaskViewModel:ViewModel() {
private  lateinit var mLiveDate: MutableLiveData<List<Task>>
private lateinit var mRepo:TaskRepository
public fun getTasks():LiveData<List<Task>>
{
    return mLiveDate
}
public fun initViewModel()
{

 mRepo=TaskRepository.TasKRepo.getInstance()
viewModelScope.launch {
    mLiveDate = mRepo.getTasks()
}
}
 

}

 Methods in the Fragment:
 override fun onCreateView(
    inflater: LayoutInflater, container: ViewGroup?,
    savedInstanceState: Bundle?): View?
{
    val view=inflater.inflate(R.layout.fragment_task, container, false)

       initViewModel()
    val taskObserver= Observer<List<Task>> {

        __adapter.notifyDataSetChanged()

    }
    initRecycleView(view)
   mViewModel.getTasks().observe(this.viewLifecycleOwner,taskObserver)
    return view
}
private fun  initRecycleView(view: View)
{

    recyclerView=view.findViewById(R.id.fragment_recycle_view)
    recyclerView.layoutManager=LinearLayoutManager(view.context)
    __adapter= ToDoAdapter(mViewModel.getTasks().value as MutableList<Task>)
    recyclerView.adapter=__adapter
 

}

Комментарии:

1. вы пытались установить точку останова в функции getTasks (), я думаю, что в «Новом списке» нет ваших данных, которые удаляются из репозитория firebase, потому что newList возвращается до вызова OnCompleteListener

2. Пожалуйста, отредактируйте свой вопрос и добавьте структуру своей базы данных в виде скриншота. Кроме того, я думаю, что это, репо может помочь.