gpt4 book ai didi

android - 即使从缓存中提取数据,Firestore 数据库读取计数也会增加

转载 作者:行者123 更新时间:2023-12-03 01:38:20 25 4
gpt4 key购买 nike

我正在 firestore 中存储一些数据,我的 Android 应用程序在启动时会加载这些数据。我使用以下方法在应用程序启动时加载此数据。

FirebaseFirestore.getInstance().collection("users").document(ApplicationEx.getUserId()).collection("items").addSnapshotListener((queryDocumentSnapshots, e) -> {
if (queryDocumentSnapshots != null) {
LOGGER.info("items fetched. from cache: " + queryDocumentSnapshots.getMetadata().isFromCache());
for (QueryDocumentSnapshot queryDocumentSnapshot : queryDocumentSnapshots) {
items.add(queryDocumentSnapshot.toObject(Item.class));
}
}
});

当我重新启动应用程序时,可以看到数据是从缓存中获取的,因为 queryDocumentSnapshots.getMetadata().isFromCache() 每次都返回 true。但是,当我检查 firebase 控制台时,我可以看到有时文档读取计数会增加。

行为不一致。当我连续多次重新启动应用程序时,读取计数大多数时候不会增加。但是,如果我几分钟没有使用该应用程序然后启动该应用程序,则读取计数大多数时候都会增加。

存储的数据没有改变,所以这不可能是由于android同步了改变的数据。

这可能是什么原因?

最佳答案

我联系了 firebase 支持人员,据他们说,这就是它在 firestore 中的工作原理。即使项目在本地缓存,当监听器断开连接超过 30 分钟时,下一次提取也会从服务器读取所有文档。

我使用以下机制在一定程度上解决了我的问题。

编写一个新的 Firebase 云函数来监听集合的写入。它将集合更新的时间写入实时数据库。

const functions = require('firebase-functions');
const admin = require('firebase-admin');

admin.initializeApp(functions.config().firebase);

exports.onItemModified = functions.firestore.document('users/{userId}/items/{itemId}').onWrite((change, context) => {
return admin.database().ref('/users/' + context.params.userId + '/items-updated-at').set(Date.now());
});

在 Android 中,在应用程序启动时,禁用网络,加载项目,然后再次启用网络。

FirebaseFirestore.getInstance().disableNetwork().addOnCompleteListener(task -> loadItems());

private void loadItems() {
Utils.getFirestoreCollection(COLLECTION_NAME_ITEMS).get().addOnCompleteListener(task -> {
//Cache loaded items in memory
FirebaseFirestore.getInstance().enableNetwork();
}
}

在android中,向写入最后一项更新时间的实时数据库路径添加一个监听器。当更新事件被触发时,再次读取项目并更新内存缓存。将项目更新时间存储在android共享首选项中,以便下次更新事件触发时,检查RTDB的更新时间是否高于保存的时间,仅当RTDB更新时间高于保存的时间时才再次读取项目。

关于android - 即使从缓存中提取数据,Firestore 数据库读取计数也会增加,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55049053/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com