【发布时间】:2021-07-15 09:06:34
【问题描述】:
我正在使用 Firebase Firestore(不是实时数据库)并用它编写一个 android 应用程序。
我希望我的应用首先离线工作,这意味着当应用加载时,FireStore 将从 Chace 加载数据并将其显示给用户,然后从服务器更改查询。
为了实现这一点,我正在使用 Chace 的源进行正常的 GET 请求(不是侦听器)。
get 调用完成后,我将附加一个侦听器来侦听所有更新。 (本地或从服务器),所以我可以向用户展示更新的状态。
这种方法的问题在于它基本上意味着我将下载同一个对象两次第一次是在初始获取请求上,然后是在初始侦听器上。这意味着我会将副本发送到 UI。
Firestore API 中是否有任何做法可以避免这种情况?那么监听器不会返回get请求已经同步的记录?
请参见下面的示例代码。谢谢!
GET 请求:(首先运行)
db.collection(sCollection)
.get(SOURCE.CHACE)
.addOnCompleteListener(new OnCompleteListener<QuerySnapshot>() {
@Override
public void onComplete(@NonNull Task<QuerySnapshot> task) {
if (task.isSuccessful()) {
for (QueryDocumentSnapshot document : task.getResult()) {
Log.d(TAG, document.getId() + " => " + document.getData());
}
} else {
Log.d(TAG, "Error getting documents: ", task.getException());
}
}
});
监听器:(第二个运行)
m_registration = db.collection(sName).
orderBy("stamp", Query.Direction.ASCENDING)
.addSnapshotListener(new EventListener<QuerySnapshot>() {
@Override
public void onEvent(@Nullable QuerySnapshot value,
@Nullable FirebaseFirestoreException e) {
if (e != null) {
Log.w(TAG, "Listen failed.", e);
return;
}
for (DocumentChange dc : value.getDocumentChanges()) {
}
catch(JSONException ex) {
}
}
【问题讨论】:
标签: android firebase google-cloud-firestore