java - Firestore执行复合查询,事件 "MODIFIED"未拦截

标签 java android firebase google-cloud-firestore

我有一个由以下属性组成的模型“Post”:

class Post {
   String timestamp;
   Boolean isActive;
}

如果我尝试(在我的 Android 应用中)使用以下查询查询我的 Firestore DB 上的 Collection “帖子”:

[1]

db.collection("posts")
        .whereEqualTo("isActive", true)
        .orderBy("timestamp",Direction.DESCENDING)
        .limit(3);

文档正确地显示在我的 RecyclerView 中,但如果我通过 Firestore 的 webConsole 更新文档的属性(例如 isActive),则事件“modified”不会被拦截到用于拦截我的集合实时更新的开关的 case“MODIFIED”中。

否则,如果我从上面的查询中删除条件 .whereEqualTo("isActive", true) 一切正常。

[2]

db.collection("posts")
        .orderBy("timestamp",Direction.DESCENDING)
        .limit(3);

否则,如果我从 [1] 查询中删除条件 .limit(3) 一切正常。

[3]

db.collection("posts")
        .whereEqualTo("isActive", true)
        .orderBy("timestamp",Direction.DESCENDING);

这是代码:

Query query = db.collection("posts")
.whereEqualTo("isActive", true)
.orderBy("timestamp",Direction.DESCENDING)
.limit(3);

ListenerGetPost = query.addSnapshotListener(
    new EventListener<QuerySnapshot>() {
        @Override
        public void onEvent(@Nullable QuerySnapshot snapshots,
                            @Nullable FirebaseFirestoreException e) {

            for (DocumentChange doc : snapshots.getDocumentChanges()) {
                switch (doc.getType()) {
                    case ADDED:
                        Post post = doc.getDocument().toObject(Post.class);
                        mPostList.add(post);
                        notifyDataSetChanged();
                        break;
                    case MODIFIED:
                        //Do something...
                        break;
                }
            }
        }
    });

提前致谢

最佳答案

当使用如下所示的查询时:

db.collection("posts")
    .whereEqualTo("isActive", true)
    .orderBy("timestamp",Direction.DESCENDING)
    .limit(3);

必须创建 index 。这可以简单地通过在 Firebase 控制台中手动创建它来完成,或者运行您的应用程序并将 logcat 中显示的链接直接复制并粘贴到您的浏览器中。然后索引就会自动创建。出现此警告后,请查看您的 logcat:

FAILED_PRECONDITION: The query requires an index. You can create it here: ...

关于java - Firestore执行复合查询,事件 "MODIFIED"未拦截,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49780315/

相关文章:

javascript - 如何将 react 类转换为 react 钩子(Hook)(firebase 存储)

java - MapReduce 作业中的多个键

Android - 进度对话框不显示在 AsyncTask 中

android - Realm 查询不更新我的适配器

java - Android Studio构建gradle失败

java - firebase getValue 方法没有按应有的方式从节点检索值

java - Android NDK 中的 Release<Primitive Type>Array Elements 导致 "JNI: pin count"警告

java - X.509 使用指纹验证 key 链

java - Elasticsearch-术语聚合嵌套字段

javascript - 问题获取 ID( Angular Material - Firestore)