尽管我已经禁用了持久性,但Firestore仍然从缓存中检索文档

10

尽管我明确告诉Firestore不要从缓存中检索文档,但它仍然在检索:

class MainActivity : AppCompatActivity() {

    val db = FirebaseFirestore.getInstance()

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        val dbSettings = FirebaseFirestoreSettings.Builder().setPersistenceEnabled(false).build()
        db.firestoreSettings = dbSettings

这是我的启动器活动,我在其中设置了Firestore的设置。

在我的片段中,我执行了一个GeoFirestore GeoQuery

class MapFragment : Fragment() {
    val instances = FirebaseFirestore.getInstance().collection("instances")
    val geoFirestore = GeoFirestore(instances)
    lateinit var nearbyDocs: GeoQuery

    private fun searchNearby(){
        nearbyDocs = geoFirestore.queryAtLocation(currentLocation, 1.0)
        nearbyDocs.addGeoQueryDataEventListener(object : GeoQueryDataEventListener {

            override fun onDocumentEntered(documentSnapshot: DocumentSnapshot, location: GeoPoint) {
               Log.d(TAG, "onDocumentEntered: user1: ${documentSnapshot.getString("user1")?.substring(0, 3)} | docId: ${documentSnapshot.id.substring(0, 5)} | fromCache: ${documentSnapshot.metadata.isFromCache}")
               Log.d(TAG, "isPersistanceEnabled2: ${db.firestoreSettings.isPersistenceEnabled}")
            }
    }

以下是它记录的内容:

onDocumentEntered: user1: 0X6 | docId: lPLFf | fromCache: true
isPersistanceEnabled2: false

尽管我已经关闭了持久化,但我仍然收到缓存文档,这没道理。

你有任何想法是什么问题吗?

编辑:我已尝试清除缓存,但问题未得到解决。


请编辑问题,详细说明您是如何观察到文档确实来自缓存而不是服务器的。 - Doug Stevenson
修改 - 如果再次发生,我将包含缓存文档日志。 - Zorgan
可能是因为你没有使用 @ 标记 Doug,所以他没有看到你的回复。我猜他本来可以帮忙的。 - Farid
@DougStevenson 我已经更新了我的答案,并附上了一些缓存检索的示例。 - Zorgan
1个回答

4

现在你可以选择只从服务器获取数据或只从缓存获取数据,就像这样(以下是只从服务器获取数据的示例):

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

如果只使用缓存,请将上面的代码更改为Source.CACHE。

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


谢谢,这将解决我的问题 - 但我正在使用一个库来进行查询:https://github.com/imperiumlabs/GeoFirestore-Android,因此我无法直接访问我的代码。 - Zorgan
@Zorgan,由于geofirestore没有强制服务器读取的选项,您可以将此库作为模块添加并更改特定部分。 - Farid

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接