当前位置: 首页 > 知识库问答 >
问题:

侦听集合中的多个文档并更新RecycerView

乐正宏深
2023-03-14

我不知道如何监听Firestore db中的更改和更新RecycerView中的项。

其中包括聊天模型RecycerView活动和适配器。

public class Chat {
    private String sender;
    private String receiver;
    private String message;
    private boolean isseen;
    public Date sent_timestamp;

    public Chat(String sender, String receiver, String message, boolean isseen, Date sent_timestamp) {
        this.sender = sender;
        this.receiver = receiver;
        this.message = message;
        this.isseen = isseen;
        this.sent_timestamp = sent_timestamp;

private void seenMessage(final String userid) {
        Query query = mFirebaseFirestore.collection("Chats");
        query.addSnapshotListener(this, new EventListener<QuerySnapshot>() {
            @Override
            public void onEvent(@Nullable QuerySnapshot queryDocumentSnapshots, @Nullable FirebaseFirestoreException e) {
                for (DocumentChange doc : queryDocumentSnapshots.getDocumentChanges()) {
                    if (doc.getType() == DocumentChange.Type.ADDED) {
                        QueryDocumentSnapshot docEvent = doc.getDocument();
                        Chat chat = doc.getDocument().toObject(Chat.class);
                        if (chat.getReceiver().equals(fuser.getUid()) && chat.getSender().equals(userid)) {
                            HashMap<String, Object> hashMap = new HashMap<>();
                            hashMap.put("isseen", true);
                            doc.getDocument().getReference().update(hashMap);
                        }
                    }
                }
            }
        });

private void readMessages(final String myid, final String userid, final String imageurl) {
        mchat = new ArrayList<>();
        messageAdapter = new MessageAdapter(MessageActivity.this, mchat, imageurl);
        recyclerView.setAdapter(messageAdapter);
        Query query = mFirebaseFirestore.collection("Chats").orderBy("sent_timestamp", Query.Direction.ASCENDING);
        query.addSnapshotListener(this, new EventListener<QuerySnapshot>() {
            @Override
            public void onEvent(@Nullable QuerySnapshot queryDocumentSnapshots, @Nullable FirebaseFirestoreException e) {
                for (DocumentChange doc : queryDocumentSnapshots.getDocumentChanges()) {
                    if (doc.getType() == DocumentChange.Type.ADDED) {
                        QueryDocumentSnapshot docEvent = doc.getDocument();
                        Chat chat = doc.getDocument().toObject(Chat.class);
                        if (chat.getReceiver().equals(myid) && chat.getSender().equals(userid) ||
                                chat.getReceiver().equals(userid) && chat.getSender().equals(myid)) {
                            mchat.add(chat);
                        }
                    }
                    messageAdapter.notifyDataSetChanged();
                }
            }
        });
    }


@Override
public void onBindViewHolder(@NonNull MessageAdapter.ViewHolder holder, int position) {

        Chat chat = mChat.get(position);
        if (position == mChat.size() - 1) {
            if (chat.isIsseen()) {
                holder.txt_seen.setText("Seen");
            } else {
                holder.txt_seen.setText("Delivered");
            }
        } else {
            holder.txt_seen.setVisibility(View.GONE);
        }

一旦值“isseen”更改为“true”,它就应该显示在发件人的电话上。

共有1个答案

班建义
2023-03-14

尝试下面的查询

Query query = mFirebaseFirestore.collection("Chats").whereEqualTo("isseen", true);

它将给出isseen=true的所有消息列表,以及任何“isseen”实时变为true的时间。

 类似资料:
  • 我有两个收藏(A和B),每个收藏约70000份文档。如果我比较A和B,95%的文档是相同的,只有5%是不同的。每个文档的结构在A和B中完全相同。A是一个固定集合,B是一个临时集合。我想将B合并到A中。如果A中存在来自B的文档-- ...我正在使用Python驱动程序(如果有必要的话)。 最有效的方法是什么?非常感谢。

  • 我想知道mongoose是否有一些方法可以通过id集更新多个文档。例如: 我想知道的是,如果猫鼬能做这样的事情: 其中,ids是一个id数组,如['id1','id2','id3']-示例数组。对于find,同样的问题。

  • 我想使用mongoose从多个文档更新多个子文档。 我目前的代码是: 模式的一部分是: 但是这段代码只更新id arr中的最后一个元素。

  • 这个监听器很管用: 当应用程序加载且侦听器开始侦听时,设置为。用户可以切换到西班牙语、普通话、芬兰语等,这将更改。问题是,在侦听器中,变量没有改变。我们是否可以动态地更改集合,或者必须为每种语言,即为每一个集合编写侦听器? 文档说明我们可以侦听一个集合中的多个文档(使用筛选器),但没有说明我们可以侦听多个集合。

  • 主要内容:合并多个PDF文档,示例在前一章中,我们已经看到如何将给定的PDF文档分成多个文档。 现在让我们学习如何将多个PDF文档合并为一个文档。 合并多个PDF文档 使用类的类将多个PDF文档合并到单个PDF文档中,该类提供了将两个或多个PDF文档合并到单个PDF文档中的方法。 以下是合并多个PDF文档的步骤。 第1步:加载现有的PDF文档 使用类的静态方法加载现有的PDF文档。 此方法接受一个文件对象作为参数,因为这是一个静态

  • 我正在尝试实现一个OpenDaylight捆绑包,它在流发生变化时接收通知。因此,我实现了DataTreeChangeListener 我错过了什么?完整的代码可在Github上获得 提前感谢!最大值