как упорядочить collection по дате в firestore?
( помогите пожалуйста!!) Всем привет! Я у меня есть код который добавляет данные в collection в firestore и есть код который стягивает данные из collection и добавляет в recyclerView при start'e приложения я стягиваю упорядочиванные данные через orderBy потом user при нажатии на button добавляет данные но данные становятся в разброс и так постоянно при нажатии на button
class FireStoreRepository @Inject constructor(private val fireStore: FirebaseFirestore) {
var collectionReference = fireStore.collection("users")
// код добавление
fun setupToDataFirebase(user: HashMap<String, Any>) {
collectionReference.add(user)
.addOnCompleteListener { document ->
if (document.isSuccessful) {
Log.e("tag", "Is Good")
} else {
Log.e("tag", "Not bad$document")
}
}
}
fun getDataFromServer(): MutableLiveData<ArrayList<TaskModel>> {
var data: MutableLiveData<ArrayList<TaskModel>> = MutableLiveData()
collectionReference
.orderBy("second", Query.Direction.ASCENDING)
.get()
.addOnSuccessListener { result ->
val list: ArrayList<TaskModel> = ArrayList()
for (document in result) {
val model: String = document.getString("first").toString()
val second: String = document.getString("second").toString()
val models = TaskModel(model)
Log.d(
"TAG", "${document.id} => ${document.data}"
)
list.add(models)
}
data.value = list
}
.addOnFailureListener { exception ->
Log.w("TAG", "Error getting documents.", exception)
}
return data
}
}
ViewModel
@HiltViewModel
class FireBaseViewModel @Inject constructor(private val repository: FireStoreRepository) :
ViewModel() {
fun setupData(user: HashMap<String, Any>) {
repository.setupToDataFirebase(user)
}
fun getData(): MutableLiveData<ArrayList<TaskModel>>{
return repository.getDataFromServer()
}
}
@AndroidEntryPoint
class FireBase : Fragment() {
private lateinit var binding: FragmentFireBaseBinding
private val taskAdapter: TaskAdapter = TaskAdapter()
private val viewModel: FireBaseViewModel by viewModels()
override fun onCreateView(
inflater: LayoutInflater, container: ViewGroup?,
savedInstanceState: Bundle?,
): View {
binding = FragmentFireBaseBinding.inflate(inflater, container, false)
return binding.root
}
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
setupRecyclerView()
getDataFromServer()
setupDataToFireBase()
}
private fun setupRecyclerView() {
binding.recView.apply {
layoutManager = LinearLayoutManager(context)
adapter = taskAdapter
}
}
private fun setupDataToFireBase() {
binding.btnGo.setOnClickListener {
val date = SimpleDateFormat("hhmmss")
val time = date.format(Date())
val user = hashMapOf(
"first" to binding.editText.text.toString(),
"second" to FieldValue.serverTimestamp()
)
viewModel.setupData(user)
getDataFromServer()
}
}
private fun getDataFromServer() {
viewModel.getData().observe(viewLifecycleOwner, {
taskAdapter.addAllList(it)
})
}
}
заранее спасибо!!
Ответы (1 шт):
Автор решения: Wockeez
→ Ссылка
db.collection("nameDoc").orderBy("date", "desc").get().then() ....
Попробуй вот так
А здесь дока официальная по сортировке