# #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. Пожалуйста, отредактируйте свой вопрос и добавьте структуру своей базы данных в виде скриншота. Кроме того, я думаю, что это, репо может помочь.