Firebase FireStore@Android-离线优先的最佳实践



我正在使用Firebase Firestore(不是实时数据库(并用它编程android应用程序。

我希望我的应用程序首先离线工作,这意味着当应用程序加载时,FireStore将从Chace加载数据并将其显示给用户,然后从服务器更改查询。

为了实现这一点,我正在使用Chace的源执行一个普通的GET请求(非侦听器(。

在get调用完成后,我将附加一个侦听器来侦听所有更新。(本地或从服务器(,这样我就可以向用户显示更新的状态。

这个方法的问题是,从根本上说,这意味着我将下载同一个对象两次第一次是在最初的get请求上,而不是在最初的监听器上。这意味着我将向UI发送重复项。

API消防店是否有任何做法可以避免这种情况?所以监听器不会返回get请求已经同步的记录?

请参阅下面的示例代码。Thx!

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) {
}

}

Firebase Firestore对offline的处理非常好,您可以将其用作oofline first数据库,而不需要自己做任何事情。您可以读取、侦听和编辑数据,就好像在同步进行一样。你应该明确地检查一下。

这意味着您不需要使用get来使offline变得更好。它将与listener到.无缝配合使用

最新更新