本地模拟的 Firestore 将空 DataSnapshot 返回到 Android 模拟器,但可与 Cloud Firestore 配合使用

问题描述 投票:0回答:1

我正在尝试测试我的 Android 应用程序,该应用程序使用来自 Firebase Firestore 的数据。但是,我在使用本地运行的 Firebase Firestore 模拟器和 Android 模拟器查询数据时遇到问题。

当我使用 Android 模拟器从 Cloud Firestore 查询数据时,一切正常。当我从模拟器 Firestore 查询数据时,我收到一个空的 DataSnapshot。

两个 Firestore 实例(本地模拟器和云 Firestore)包含相同的数据。

当我在 Android 模拟器的浏览器中输入

10.0.2.2.:4001
时,我会看到
Firebase Emulator Suite
,并且可以看到 Firestore 模拟器状态为
On
。在我看来,这意味着存在与我本地运行的 Firestore 模拟器的连接。

我的用于初始化 Firestore 实例的代码:

private val db = Firebase.firestore
db.useEmulator("10.0.2.2", 8080)
db.firestoreSettings = firestoreSettings { isPersistenceEnabled = false }
val docVal = db.collection("district_codes")
            .document("district_codes")
            .get()
            .await()

我正在运行的本地 Firestore 模拟器的日志:

┌─────────────────────────────────────────────────────────────┐
│ ✔  All emulators ready! It is now safe to connect your app. │
│ i  View Emulator UI at http://127.0.0.1:4001/               │
└─────────────────────────────────────────────────────────────┘

┌───────────┬────────────────┬─────────────────────────────────┐
│ Emulator  │ Host:Port      │ View in Emulator UI             │
├───────────┼────────────────┼─────────────────────────────────┤
│ Firestore │ 127.0.0.1:8080 │ http://127.0.0.1:4001/firestore │
└───────────┴────────────────┴─────────────────────────────────┘
  Emulator Hub running at 127.0.0.1:4401
  Other reserved ports: 4501, 9150

为什么我无法从本地运行的 Firebase Firestore 实例检索数据,而从 Cloud Firestore 实例检索数据却可以正常工作?

更新 我尝试用一个简单的测试条目来测试它:在路径

/Test/doc_test
中,我添加了一个名为
test_field
的字符串字段。

本地 Firestore 模拟器上的测试条目的结构: enter image description here

我使用以下命令检索它:

val docVal = db.collection("Test").document("doc_test").get().await()
val foundValue = docVal.get("test_field") as String?
Log.i(TAG_FIRESTORE, "Found following test value: ${foundValue} - ${docVal}")

并获取以下日志条目:

找到以下测试值:null - DocumentSnapshot{key=Test/doc_test,metadata=SnapshotMetadata{hasPendingWrites=false, isFromCache=false}, doc=null}

android firebase android-emulator firebase-tools
1个回答
0
投票

该问题是由于使用了错误的项目 ID 引起的。在 Firestore-debug.log 文件中,以下条目突出显示了该问题:

Multiple projectIds are not recommended in single project mode. Requested project ID <my_project>, but the emulator is configured for <my_project>_testing.

发生这种情况是因为我为模拟器使用的项目 ID 与为云中的 Firebase Firestore 配置的项目 ID 不同。

为了解决此问题,我更新了模拟器配置中的项目 ID,以匹配 Firebase Firestore 中使用的项目 ID。

© www.soinside.com 2019 - 2024. All rights reserved.