我正在使用Firebase Emulator Suite来测试我的Firebase Cloud Functions,然后再将它们部署到生产环境中。
探索this方法来从我的Andriod设备触发可调用的firebase云函数。
我的应用程序在运行时崩溃。
错误:
java.lang.IllegalStateException:示例已初始化后无法调用useEmulator()。
错误来源-FirebaseFirestore.java:
/**
* Modifies this FirebaseDatabase instance to communicate with the Cloud Firestore emulator.
*
* <p>Note: Call this method before using the instance to do any database operations.
*
* @param host the emulator host (for example, 10.0.2.2)
* @param port the emulator port (for example, 8080)
*/
public void useEmulator(@NonNull String host, int port) {
if (this.client != null) {
throw new IllegalStateException(
"Cannot call useEmulator() after instance has already been initialized.");
}
this.emulatorSettings = new EmulatedServiceSettings(host, port);
this.settings = mergeEmulatorSettings(this.settings, this.emulatorSettings);
}
Firestore使用以下方法注入:(在我的项目中使用Hilt)
@Provides
fun provideFirebaseFirestore(): FirebaseFirestore {
val firebaseFirestoreSettings = FirebaseFirestoreSettings.Builder()
firebaseFirestoreSettings.isPersistenceEnabled = false
val firestore = FirebaseFirestore.getInstance()
firestore.useEmulator("192.168.1.102", 8080)
firestore.firestoreSettings = firebaseFirestoreSettings.build()
return firestore
}
我怀疑FirebaseFirestore.java
中的useEmulator()
不是一个静态方法。
如何在创建Firebase Firestore示例之前调用它?
3条答案
按热度按时间r1zhe5dt1#
我也遇到了同样的问题,我解决它的方法是将
firestore.useEmulator("192.168.1.102", 8080)
Package 在try catch块中,如下所示:3hvapo4f2#
这可能是因为Firebase状态在测试之间保持不变。然后针对同一个Firebase应用示例调用useEmulator两次,引发错误。至少,这是在测试期间发生在我身上的事情。
检查firestore示例中嵌套的“host”属性的方法(描述为in this answer)对我来说很有效。
pod7payv3#
在函数
provideFirebaseFirestore()
中添加@Singleton解决了这个问题,因为它确保类只示例化一次。