I am trying get users list from Firebase. I use repository and viewmodel. I am newcomer in the clean architecture and I think, that I made error , when have made viewModel method.
`class UserRepository {
private var usersList: ArrayList<User>? = ArrayList()
fun readUsers(): ArrayList<User> {
var firebaseUser: FirebaseUser? = FirebaseAuth.getInstance().currentUser
var databaseReference: DatabaseReference =
FirebaseDatabase.getInstance().getReference("Users")
databaseReference.addValueEventListener(object : ValueEventListener {
override fun onDataChange(dataSnapshot: DataSnapshot) {
usersList?.clear()
for (data: DataSnapshot in dataSnapshot.children) {
val user: User? = data.getValue(User::class.java)
if (!user?.id.equals(firebaseUser?.uid)) {
usersList?.add(user!!)
}
}
}
override fun onCancelled(error: DatabaseError) {
// Failed to read value
}
})
return usersList!!
}
}`
when I am debugging I see that usrlist
is not empty
class UserViewModel(application: Application) : AndroidViewModel(application){
private var userRepository: UserRepository? = UserRepository()
private var mutableLiveData: MutableLiveData<List<User>>? = MutableLiveData()
init {
mutableLiveData?.value=userRepository?.readUsers()
}
fun getAllUsers(): MutableLiveData<List<User>>? {
return mutableLiveData
}
}
and in fragment I call:
override fun onActivityCreated(savedInstanceState: Bundle?) {
super.onActivityCreated(savedInstanceState)
userViewModel = ViewModelProvider(this)[UserViewModel::class.java]
userViewModel?.getAllUsers()?.observe(viewLifecycleOwner,
{ t ->
userAdapter = UserAdapter(requireContext(), t!!, false)
recyclerView?.adapter = userAdapter
})
}
I dont understand, why firstly calls init()
from ViewModel.class
then getAllUsers()
from ViewModel.class
then onActivityCreated(savedInstanceState: Bundle?)
from fragment and then calls readUsers()
from repository???