Разбейте значения Firestore в порядке - PullRequest
0 голосов
/ 28 октября 2019

У меня есть База данных Cloud Firestore , и для доступа к ней я использую:

CollectionReference robDetails = db.collection("ROBOTS").document(RobotA).collection(RobotB);

image Каждое из этих " Соединений"содержит два поля ( ConnectionType & ConnectionTime ) со значениями.

Я хочу загрузить Соединения упорядочение по ConnectionTime (самое позднее наснизу, как показано на следующем рисунке), но нужно только показать 3 последних соединения, а когда пользователь прокручивает вверх, показать еще 3 над предыдущими с помощью SwipeRefreshLayout:

Picture

Код, который я сейчас должен загрузить для всех соединений, как на предыдущем рисунке:

 private void loadConnections() {
    CollectionReference loadConnect = db.collection("ROBOTS").document(RobotA).collection(RobotB);
    loadConnections.orderBy("connectionTime", Query.Direction.ASCENDING).addSnapshotListener(new EventListener<QuerySnapshot>() {
        @Override
        public void onEvent(@Nullable QuerySnapshot queryDocumentSnapshots, @Nullable FirebaseFirestoreException e) {

            for (DocumentChange documentChange : queryDocumentSnapshots.getDocumentChanges()) {
                Connections connection = documentChange.getDocument().toObject(Connections.class);

                mConnectionsList.add(connection);
                mAdapter.notifyDataSetChanged();

                conRecyclerView.scrollToPosition(mConnectionsList.size() - 1);
                conSwipeRefresh.setRefreshing(false);
            }
        }
    });
}

TL; DR: Я хочу сначала загрузить в свой RecyclerView Part1и когда пользователь прокручивает загрузку Part2, когда пользователь прокручивает загрузку Part3 ... с помощью SwipeRefreshLayout.

1 Ответ

1 голос
/ 30 октября 2019

Я в основном придумал логику разбиения на страницы, которая проверяет текущую дату и загружает соединения, произошедшие в тот день, когда пользователь прокручивает список SwipeRefreshLayout, текущая дата вычитается на 1, и пользователь может получить соединения предыдущего дня. :

 conSwipeRefresh.setOnRefreshListener(new SwipeRefreshLayout.OnRefreshListener() {
        @Override
        public void onRefresh() {
            Calendar cal = Calendar.getInstance();
            //subtracting a day
            cal.add(Calendar.DATE, numberToSubtract);
            numberToSubtract--;
            SimpleDateFormat s = new SimpleDateFormat("dd-MM-yyyy");
            String day = s.format(new Date(cal.getTimeInMillis()));

            loadMoreConnections(day);
        }
    });

private void loadMoreMessages(String day) {
    mMessagesList.clear();
    CollectionReference loadConnect = db.collection("ROBOTS").document(RobotA).collection(RobotB);
    loadConnect.orderBy("timestamp", Query.Direction.ASCENDING).startAt(day).endBefore(currentDay).addSnapshotListener(new EventListener<QuerySnapshot>() {
        @Override
        public void onEvent(@Nullable QuerySnapshot queryDocumentSnapshots, @Nullable FirebaseFirestoreException e) {
            if (e != null) {
                Toast.makeText(ChatActivity.this, "Error:" + e.toString(), Toast.LENGTH_SHORT).show();
            }
            for (DocumentChange documentChange : queryDocumentSnapshots.getDocumentChanges()) {
                Connections connection = documentChange.getDocument().toObject(Connections.class);

                mConnectionsList.add(connection);
                mAdapter.notifyDataSetChanged();

                conSwipeRefresh.setRefreshing(false);
            }
        }
    });
    loadConnections();
}
...