android - 使用 FireStore 同步获取文档

标签 android firebase google-cloud-firestore parse-server

我一直在使用 parse-server 作为我的后端,现在将我所有的东西迁移到 FireStore(专门用于存储额外的用户数据)。现在,有了 parse,我可以直接使用 ParseUser.getCurrentUser().getString(...) 获取用户数据。如果我使用 FireStore,我已经创建了一个 users 集合,我可以为每个用户存储一个 document,它还支持具有离线支持的本地存储.但我面临的问题是我总是需要使用异步/回调方法从文档中获取数据。这是 android 中的示例:

final DocumentReference docRef = mFirestore
                    .collection(USER_COLLECTION).document(mAuthApi.getCurrentUserId());
            docRef.get(Source.CACHE).addOnCompleteListener(task -> {
                if(task.isSuccessful()) {
                    ......
                } else {
                    ......
                }
            });

有没有一种方法可以让我们直接从 DocumentReference 同步获取数据 假设它是本地缓存的?像这样的东西:

mFirestore.collection(USER_COLLECTION).document(mAuthApi.getCurrentUserId()).getString(...)

这对我来说会很容易,因为我需要用等效的 FireStore 调用替换 ParseUser.getCurrentUser().getString(...) 我的整个代码库。

最佳答案

Is there a way where we can directly get data synchronously from DocumentReference assuming it is locally cached?

不,在响应式应用方面没有。您无法在连接到服务器时强制从缓存中检索数据,因为您无法在未连接到服务器时停止从缓存中检索数据。

但不仅 Firebase Realtime Database 或 Cloud Firestore 异步加载数据,几乎所有其他现代 Web API 都会异步加载数据,因为获取数据可能需要一些时间。因此,如果您强制同步获取数据,则会导致用户的应用程序对话框无响应。

大多数开发人员的最初 react 是尝试“修复”这种异步行为,我个人不建议这样做。 Web 是异步的,一旦您接受了这一点,您将学习如何使用现代 Web API 提高工作效率。

有一个非常有趣的post这是 Doug Stevenson 写的,可以帮助您更好地理解这个概念。

关于android - 使用 FireStore 同步获取文档,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50719991/

相关文章:

android - Firestore 任务 whenallcomplete() - 任务尚未完成

java - 将项目作为库链接到其他项目

Android handler.postDelayed 正在阻止我的媒体播放器顺利播放歌曲?

java - Android http 连接被拒绝

node.js - Firebase Cloud Functions 中抛出未处理的错误

javascript - 使用基于文档的数据存储实现复杂搜索的最佳方法

java - JSON 解析为 Java - Android 应用程序

firebase - 尝试使用.createUserWithEmailAndPassword时为类“The getter '定义的' isn' uid 'AuthResult' t

firebase - "Firebase Auth"自定义声明最终是否一致?

javascript - Firebase 在获取查询后运行设置查询