База данных Android Firebase limitolast 10, но добавить - PullRequest
0 голосов
/ 12 января 2019

Я пытаюсь подключить базу данных Firebase в режиме реального времени в качестве базы данных к чатам моего приложения. Я знаю, что могу ограничить записи, к которым у меня есть доступ, последними 10 записями, вызвав функцию limitToLast(10) для моей ссылки на Firebase.

Проблема, с которой я столкнулся сейчас, заключается в том, что когда я делаю это, она ограничивает эту ссылку, чтобы всегда отображать последние 10 записей, даже если я добавлю больше записей из своего приложения. Тем не менее, я бы хотел, чтобы он учитывался при добавлении новых записей в мое приложение. Так, например, если я добавлю еще 2 записи, мой список чатов будет отображать 12 записей и т. Д.

Вот мой код с добавленным limitToLast(10).

DatabaseReference tRef = database.getReference(getString(R.string.firebase_channel));
tRef.limitToLast(10).addChildEventListener(new ChildEventListener() {
        @Override
        public void onChildAdded(@NonNull DataSnapshot dataSnapshot, @Nullable String s) {
            Chat c = dataSnapshot.getValue(Chat.class);
            chatAdapter.newChat(c, dataSnapshot.getKey());
            Log.d(TAG, "onChildAdded\t" + c.asChat());
        }

        @Override
        public void onChildChanged(@NonNull DataSnapshot dataSnapshot, @Nullable String s) {
            Chat c = dataSnapshot.getValue(Chat.class);
            chatAdapter.modifyChat(c, dataSnapshot.getKey());
            Log.d(TAG, "onChildChanged\t" + c.asChat());
        }

        @Override
        public void onChildRemoved(@NonNull DataSnapshot dataSnapshot) {
            Chat c = chatAdapter.removeChat(dataSnapshot.getKey());
            Log.d(TAG, "onChildRemoved\t" + c.asChat());
        }

        @Override
        public void onChildMoved(@NonNull DataSnapshot dataSnapshot, @Nullable String s) {
            Chat c = dataSnapshot.getValue(Chat.class);
            chatAdapter.moveChat(c, dataSnapshot.getKey());
            Log.d(TAG, "onChildMoved\t" + c.asChat());
        }

        @Override
        public void onCancelled(@NonNull DatabaseError databaseError) {
            Log.d(TAG, "onCancelled\t" + databaseError.toException());
            Toast.makeText(context, "error loading chat list", Toast.LENGTH_SHORT).show();
        }
    });

Мне пришло в голову разделить списки чатов на один, который я показываю в своем приложении, и один, с которым я связан с Firebase, поэтому, когда в мое приложение будет добавлена ​​новая запись, я добавлю это в оба списка. Но я действительно не думаю, что использование этой дополнительной памяти является решением этой проблемы. Есть ли способ решить эту проблему иначе?

1 Ответ

0 голосов
/ 12 января 2019

Если вы когда-нибудь захотите добавить элементы, как насчет простого игнорирования onChildRemoved?

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