相关疑难解决方法(0)

Firestore与Firebase的离线问题

我将我的一个应用程序转换为新的Firestore.我正在做一些事情,比如在点击按钮上保存文档,然后在onSuccess监听器中进行不同的活动.

我还使用Firestore保存操作返回任务的事实,使用以下方法将任务组合在一起Tasks.whenAll:

val allTasks = Tasks.whenAll(
       createSupporter(supporter),,
       setStreetLookup(makeStreetKey(supporter.street_name)),
       updateCircleChartForUser(statusChange, createMode = true), 
       updateStatusCountForUser(statusChange))

      allTasks.addOnSuccessListener(this@SignUpActivity, successListener)
      allTasks.addOnFailureListener(this@SignUpActivity, onFailureListener)
Run Code Online (Sandbox Code Playgroud)

最后,我从成功保存中获取文档ID并将其存储在首选项或本地数据库中供以后使用(在...内onSuccessListener)

一切都很好.直到失去网络连接.然后一切都崩溃了,因为任务永远不会完成,onSuccess/onFailure/onComplete监听器永远不会被调用.所以该应用程序只是挂起.

我通过在每次保存之前检查网络可用性来解决这个问题,然后通过创建没有任何监听器的任务来解决这个问题.我还使用UUID生成器在本地生成文档ID.

这个,BTW,不是应用程序与旧的firebase一起工作的方式.在这种情况下,一切都在离线时运行良好,我看到文件在应用程序上线时同步.

我对Firestore的解决方法似乎是一个可怕的黑客.有没有人想出更好的解决方案?

在没有连接的 情况下,在没有使用cloud firestore脱机调用addOnCompleteListener的情况下,请参阅有关插入/删除文档回调的相关Firestore数据库

android firebase firebase-realtime-database google-cloud-firestore

12
推荐指数
2
解决办法
3132
查看次数

addOnCompleteListener未使用云防火墙进行脱机调用

我一直在使用新的云firestore数据库编写应用程序.虽然启用了离线持久性,但离线时很多东西都不能顺利运行,这很有效.例如,我做了以下事情:

ref.delete().addOnCompleteListener(new OnCompleteListener<Void>() {
            @Override
            public void onComplete(@NonNull Task<Void> task) {
                if (task.isSuccessful()) {
                    //Do something
                } else {
                    //Do another thing
                }

            }
        });
Run Code Online (Sandbox Code Playgroud)

但是,onComplete离线时永远不会调用该方法.一旦发生这种情况,我想关闭活动并显示一些Snachbar.但从未如此,活动仍然开放.我正在使用android studio模拟器.

谢谢

android google-cloud-firestore

5
推荐指数
1
解决办法
1973
查看次数

使用whereArrayContains搜索的效率

我对使用此代码在集合中搜索文档的效率感到好奇。随着集合中文档数量的增加和数组中项目的数量的增加,这种搜索会变得非常低效吗?是否有更好的方法可以执行此操作,或者可以对数据库进行模式更改以更好地优化此方法?在哪里可以找到Firestore文档的这些功能的时间复杂性?

Query query = db.collection("groups").whereArrayContains("members", userid);
Run Code Online (Sandbox Code Playgroud)


替代解决方案

我最初想尝试将组ID存储在该用户下,以便仅抓取该当前用户的组,但是遇到了问题,而且从未找到使用多个ID进行查询来设置FireStoreRecyclerOptions的解决方案。

例:

for(String groupid : list) {
    Query query = db.collection("test-groups").document(groupid);

    FirestoreRecyclerOptions<GroupResponse> response = new FirestoreRecyclerOptions.Builder<GroupResponse>()
            .setQuery(query, GroupResponse.class)
            .build();
}
Run Code Online (Sandbox Code Playgroud)

有没有一种方法可以向其中添加多个查询FirestoreRecyclerOptions

java android firebase firebaseui google-cloud-firestore

5
推荐指数
1
解决办法
595
查看次数