заказ по детскому времени - PullRequest
0 голосов
/ 12 октября 2018

enter image description here

Вот моя база данных, и я хочу расположить их по времени ...

Мой код

mTimeReference = FirebaseDatabase.getInstance().getReference().child("Messages").child(UID).child(userId);
mTimeReference.orderByChild("Time").addChildEventListener(new ChildEventListener() {
    @Override
    public void onChildAdded(DataSnapshot dataSnapshot, String s) {
            String time = dataSnapshot.child("Time").getValue().toString();
            String message = dataSnapshot.child("Message").getValue().toString();
            LastSeen lastSeeen = new LastSeen();
            long lastTime = Long.parseLong(time);
            String lastSeenTime = lastSeeen.lastSeen(lastTime, getActivity());
            if(lastSeenTime == null) {
                holder.setTime("Just Now");
            }
            else {
                holder.setTime(lastSeenTime);
            }
            holder.setMessage(message);
            linearLayoutManager.setStackFromEnd(true);
    }

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

    }

    @Override
    public void onChildRemoved(DataSnapshot dataSnapshot) {

    }

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

    }

    @Override
    public void onCancelled(DatabaseError databaseError) {

    }
});

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

Мой нынешний код не работает.

Если вы не можетеВыясните проблему, по крайней мере, скажите мне, как поместить элемент RecyclerView сверху.Например, если я хочу поставить друга Б сверху, как мне это сделать?

1 Ответ

0 голосов
/ 13 октября 2018

Вы можете заказать клиентскую часть чатов или использовать индексированный адаптер Firebase.

Для этого вам необходимо создать дополнительную структуру в вашей базе данных, например:

root
- Chats...
- Messages...
- UserActiveChats
  - UserId <- your id
    - FriendUserId: TimeStamp
    - FriendUserId: TimeStamp

Тогда вынеобходимо изменить функцию «Add-Chat-Message (как бы вы ее ни реализовали)» на WriteBatch, которая:

  • создает сообщение ChatMessage (как сейчас, в / Messages / userId / friendId / ..)
  • Создает / Устанавливает значение в /UserActiveMessages/userId/friendId:ServerValue.TimeStamp

Таким образом, вы можете создать запрос в / UserActiveMessages / myUserId и упорядочить его по значению (отметка времени), которая представляет собой последний раз, когда они отправили вам сообщение.Таким образом, вы получите упорядоченный список последних пользователей, отправивших вам сообщение.Тогда все, что вам нужно сделать, это использовать индексированный FirebaseRecyclerAdapter для отображения реальных чатов, а не только их userId.

keyQuery = rootReference.child('/UserActiveMessages/userId').orderByValue();
chatsRef = rootReference.child('/Messages/userId/');

FirebaseRecyclerOptions<Chat> options = new FirebaseRecyclerOptions.Builder<Chat>()
        .setIndexedQuery(keyQuery, chatsRef, Chat.class)
        .build();

посмотрите, как реализовать остальные здесь: https://github.com/firebase/FirebaseUI-Android/blob/master/database/README.md#using-firebaseui-with-indexed-data

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