我将我的一个应用程序转换为新的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
我一直在使用新的云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模拟器.
谢谢
我对使用此代码在集合中搜索文档的效率感到好奇。随着集合中文档数量的增加和数组中项目的数量的增加,这种搜索会变得非常低效吗?是否有更好的方法可以执行此操作,或者可以对数据库进行模式更改以更好地优化此方法?在哪里可以找到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?