Применить фильтр в FirebaseRecyclerAdapter

android firebase firebase-realtime-database firebaseui

877 просмотра

1 ответ

366 Репутация автора

Я использую FirebaseRecyclerAdapterдля отображения сообщений чата.

private void attachRecyclerViewAdapter() {
    lastFifty = mChatRef.limitToLast(50).;
    mRecyclerViewAdapter = new FirebaseRecyclerAdapter<Chat, ChatHolder>(
            Chat.class, R.layout.message, ChatHolder.class, lastFifty) {

        @Override
        public void populateViewHolder(ChatHolder chatView, Chat chat, int position) {
            chatView.setName(chat.getName());
            chatView.setText(chat.getText());
            chatView.setTimeLocation(chat.getTime());
            FirebaseUser currentUser = mAuth.getCurrentUser();

            if (currentUser != null && chat.getUid().equals(currentUser.getUid())) {
                chatView.setIsSender(true);
            } else {
                chatView.setIsSender(false);
            }
        }
    };

У меня есть список, который содержит список конкретных пользователей. Я хотел бы применить фильтр, чтобы видеть только сообщения от этих конкретных пользователей. Что я должен делать ?

Автор: user655561 Источник Размещён: 18.07.2016 10:09

Ответы (1)


2 плюса

2436 Репутация автора

Вы можете создавать сообщения с парой идентификаторов пользователей. Например, сообщения -> 'uid1-uid2' -> ...

Чтобы предотвратить первоочередные uid-операции, как в следующем коде генератора messageId:

public static String getMessageId(String id1, String id2){
        String messageId;

        if(id1.compareTo(id2) < 0){
            messageId = id1 + "-" + id2;
        }else if(id1.compareTo(id2) > 0) {
            messageId = id2 + "-" + id1;
        }else{
            messageId = id1;
        }

        return messageId;
    }

Если вы хотите просмотреть историю чата между пользователем и самим собой, получение идентификатора пользователя и генерация messageId = getMessageId(id1, id2); or messageId = getMessageId(id2, id1);дает тот же результат, поскольку порядок не влияет на результат.

Затем вызовите сообщения из узла messages -> messageId

PS вы должны реструктурировать свой узел сообщений, как я описываю.

РЕДАКТИРОВАТЬ

Вы можете конвертировать messageId в эквивалент md5 для сохранения символов.

просто поменяй

return messageId;

в

return md5(messageId);

где md5 это:

public static String md5(final String s) {
    try {
        // Create MD5 Hash
        MessageDigest digest = java.security.MessageDigest
                .getInstance("MD5");
        digest.update(s.getBytes());
        byte messageDigest[] = digest.digest();

        // Create Hex String
        StringBuffer hexString = new StringBuffer();
        for (int i = 0; i < messageDigest.length; i++) {
            String h = Integer.toHexString(0xFF & messageDigest[i]);
            while (h.length() < 2)
                h = "0" + h;
            hexString.append(h);
        }
        return hexString.toString();

    } catch (NoSuchAlgorithmException e) {
        e.printStackTrace();
    }
    return "";
}
Автор: ugur Размещён: 07.09.2016 01:47
Вопросы из категории :
32x32