0

Problem:

I am storing events (think calendar events) in Firestore and the times as Strings because timestamps in Firestore seem to be something else. Ex. 10:00 AM, 10:00 PM, etc. I want to display these events in my RecyclerView sorted by time.

Is it possible to sort them before populating the RecyclerView? I tried looking and found nothing online and don't know how to approach this problem.

I am using FirebaseUI and I'm guessing this has to happen in the Adapter somewhere

Query query = firebaseFirestore.collection(year).whereIn("location", "Park").orderBy("time", Query.Direction.ASCENDING);
                    //Recycler options
                    FirestoreRecyclerOptions < EventModel > options = new FirestoreRecyclerOptions.Builder < EventModel > ()
                            .setQuery(query, EventModel.class)
                            .build();

                    eventAdapter = new EventAdapter(options);
                    mFirestoreList.setAdapter(eventAdapter);
                    eventAdapter.startListening();
                    eventAdapter.notifyDataSetChanged();
Alex Mamo
  • 130,605
  • 17
  • 163
  • 193
David
  • 5
  • 4
  • You can use `Date` data type to store dates. `FirebaseFirestore` supports query and operations on `Date` field. – Hussain Jul 13 '20 at 07:05

1 Answers1

1

If you want to get accurate results when querying a Firestore database, you should use either a java Date or a Firestore Timestamp object, but definitely not a String. I'm saying that, because the way String objects are ordered, is lexicographic and the result that you'll get will not be much of a help.

To be able to add a Timestamp value, you can use the solution from my following answer:

ServerTimestamp is always null on Firebase Firestore

The query that you are actually using should not be changed, it will work the way it is right now.

Alex Mamo
  • 130,605
  • 17
  • 163
  • 193