即使我已禁用持久性,Firestore仍会从缓存中检索文档

Zor*_*gan 9 android kotlin firebase geofire google-cloud-firestore

即使我明确告诉我不要,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
Run Code Online (Sandbox Code Playgroud)

上面是我在启动器中设置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}")
            }
    }
Run Code Online (Sandbox Code Playgroud)

这是它记录的内容:

onDocumentEntered: user1: 0X6 | docId: lPLFf | fromCache: true
isPersistanceEnabled2: false
Run Code Online (Sandbox Code Playgroud)

这没有道理-即使我的持久性已关闭,我仍在接收缓存的文档。

知道是什么问题吗?

编辑:我曾尝试清除缓存,但不能解决问题。

小智 4

您现在可以选择是仅从服务器获取数据,还是仅从缓存获取数据,如下所示(仅适用于服务器的示例):

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

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

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