gpt4 book ai didi

java - 无法在 Firestore 中禁用离线数据

转载 作者:IT老高 更新时间:2023-10-28 23:14:43 25 4
gpt4 key购买 nike

从我的 Firestore 数据库 中删除数据后,我的 Android app 需要一段时间才能意识到数据已被删除,我假设这是由于自动数据缓存而发生的。我的应用与离线使用无关,我想禁用此功能...

我已经在我的自定义 Application Class 中添加了这个:

import android.app.Application;
import com.google.firebase.firestore.FirebaseFirestore;
import com.google.firebase.firestore.FirebaseFirestoreSettings;

public class ApplicationClass extends Application {

@Override
public void onCreate() {
super.onCreate();

FirebaseFirestore db=FirebaseFirestore.getInstance();
FirebaseFirestoreSettings settings = new FirebaseFirestoreSettings.Builder()
.setPersistenceEnabled(false)
.build();
db.setFirestoreSettings(settings);
}
}

问题发生在关闭互联网连接后,然后重新打开(当应用程序仍在运行时,无论是否在后台)- Firestore 模块似乎失去了与服务器的连接,并且它进行了与预期相反的操作 - 而不是停止从缓存中获取数据,它从缓存中获取数据 em>.

例如,调试此代码将始终显示 isFromCachetrue 并且 documentSnapshot 为空(即使在 server 端 - 它不是空的):

usersRef.document(loggedEmail).collection("challenges_received").get().addOnSuccessListener(new OnSuccessListener<QuerySnapshot>() {
@Override
public void onSuccess(QuerySnapshot documentSnapshots) {
boolean isFromCache=documentSnapshots.getMetadata().isFromCache();
if (!documentSnapshots.isEmpty()) {
}
}
});

这是正常行为吗?

还有其他方法可以禁用 Cloud Firestore 中的数据缓存吗?


编辑:

在自定义 Application Class 中添加:FirebaseFirestore.setLoggingEnabled(flase);(而不是上面的代码)给出相同的结果。

最佳答案

根据Cloud Firestore 16.0.0 SDK更新,现在有解决这个问题的办法:

enter image description here


您现在可以选择是否要从仅服务器仅缓存中获取数据,例如this(仅服务器示例):

DocumentReference documentReference= FirebaseFirestore.getInstance().document("example");
documentReference.get(Source.SERVER).addOnSuccessListener(new OnSuccessListener<DocumentSnapshot>() {
@Override
public void onSuccess(DocumentSnapshot documentSnapshot) {
//...
}
});

仅用于缓存,只需将上面的代码更改为 Source.CACHE


默认情况下,这两种方法仍会尝试服务器并回退到缓存。

关于java - 无法在 Firestore 中禁用离线数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46894118/

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