首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >在FirebaseRecyclerAdapter上应用过滤器

在FirebaseRecyclerAdapter上应用过滤器
EN

Stack Overflow用户
提问于 2016-07-18 18:09:55
回答 1查看 928关注 0票数 19

我正在使用FirebaseRecyclerAdapter显示聊天消息。

代码语言:javascript
复制
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);
            }
        }
    };

我有一个包含特定用户列表的列表。我想应用过滤器,以便只看到来自那些特定用户的邮件。我该怎么做?

EN

回答 1

Stack Overflow用户

发布于 2016-09-07 21:47:36

您可以使用用户id对节点创建消息。例如messages->'uid1-uid2'->...

为了防止哪一个是第一个uids字母,特别是下面的messageId生成器代码所做的:

代码语言:javascript
复制
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;
    }

当您想查看用户和自己之间的聊天历史记录时,获取用户的id并生成messageId = getMessageId(id1, id2); or messageId = getMessageId(id2, id1);会得到相同的结果,因为顺序不会影响结果。

然后从节点messages -> messageId调用消息

P.S.你应该按照我描述的那样重新构造你的messages节点。

编辑

您可以将messageId转换为等价的md5,以节省字符。

只要改变就好

代码语言:javascript
复制
return messageId;

代码语言:javascript
复制
return md5(messageId);

其中,md5是:

代码语言:javascript
复制
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 "";
}
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38434023

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档