Firebase setPersistenceEnabled (true) как насчет загруженных данных - PullRequest
1 голос
/ 17 марта 2019

вот моя функция для получения данных:

public void retrievedata(){
    FirstRef.child(obj.getsEventID()).orderByChild("date").addChildEventListener(new ChildEventListener() {
        @Override
        public void onChildAdded(@NonNull DataSnapshot dataSnapshot, @Nullable String s)
        {

            if (dataSnapshot.exists())
            {
                DisplayMessages(dataSnapshot);
            }

        }

        @Override
        public void onChildChanged(@NonNull DataSnapshot dataSnapshot, @Nullable String s)
        {

        }

        @Override
        public void onChildRemoved(@NonNull DataSnapshot dataSnapshot) {

        }

        @Override
        public void onChildMoved(@NonNull DataSnapshot dataSnapshot, @Nullable String s) {

        }

        @Override
        public void onCancelled(@NonNull DatabaseError databaseError) {

        }
    });
}


private void DisplayMessages(DataSnapshot dataSnapshot) {
    Iterator iterator = dataSnapshot.getChildren().iterator();




        String Article = (String) ((DataSnapshot) iterator.next()).getValue();
        String Key = (String) ((DataSnapshot) iterator.next()).getValue();
        String Organisateur = (String) dataSnapshot.child("name").getValue().toString();
        String date = (String) dataSnapshot.child("date").getValue().toString();


         Date resultdate = new Date(Long.parseLong(date));
         String date2 = DateFormat.format(resultdate).toString();


        ListOfArticles.add(0,new ListItemTypeOne(Key, Article, Organisateur, date2));




        adapter.notifyDataSetChanged();

    } 

Предположим, у меня есть 10 статей, они хранятся в памяти диска благодаря: FirebaseDatabase.getInstance().setPersistenceEnabled(true);

Теперь, пока яв автономном режиме кто-то добавил еще 2 статьи, что составляет 12. Если я захожу в сеть и выполняю функцию «извлечения данных», он просто вызовет onchild, добавив в память 10 дочерних элементов и 2 новых дочерних элемента из базы данных firebase, илискачать все 12 детей из firebase?

Ответы [ 2 ]

0 голосов
/ 17 марта 2019

Когда вы присоединяете слушателя к данным, которые уже присутствуют на устройстве, Firebase сразу же удовлетворяет слушателя данными, которые у него есть на устройстве.

Таким образом, клиент Firebase немедленно вызовет ваш onChildAdded с 10 дочерними узлами, которые мы сохранили ранее.

Затем отправляет запрос на сервер, чтобы получить самую последнюю версию. Это делается с помощью так называемой дельта-синхронизации, что означает отправку хеш-значения локального состояния, которое сервер сравнивает с текущим состоянием в базе данных. Затем сервер отправляет дельту обратно, которую клиент Firebase затем использует для обновления своего внутреннего снимка и состояния на диске.

Если есть какие-либо изменения, клиент Firebase затем запускает правильные локальные события, чтобы позволить вашему приложению обновиться до нового состояния. Так что в случае, когда были добавлены два дочерних узла, для каждого из них будет вызываться onChildAdded.

Если бы вы использовали слушателя с ограничением, скажем, limitToLast(10), тогда клиент Firebase также вызвал бы onChildRemoved для двух дочерних элементов, которых больше нет в этом запросе (так как они были вытеснены новыми дочерними элементами ).

0 голосов
/ 17 марта 2019

Ранее кэшированные 10 дочерних элементов будут загружены с диска и больше не переносятся с сервера.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...