You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Dagger Hilt为Android应用配置Firebase Firestore离线模式

解决Dagger Hilt配置Firestore离线模式的问题

错误原因

你遇到的Cannot access '<init>': it is private in 'Builder'错误,是因为PersistentCacheSettings.Builder的构造函数为私有,不能直接通过new实例化。Firebase提供了静态方法来获取Builder实例,而非直接构造。

最佳配置方案

Firestore默认已开启本地持久化缓存,离线时会自动读写本地数据,恢复网络后自动同步。如果需要自定义缓存参数(比如缓存大小),可按以下方式通过Dagger Hilt配置:

1. 修正FirebaseModule代码

@Module
@InstallIn(SingletonComponent::class)
class FirebaseModule {
    @Provides
    fun provideFirebaseAuth(): FirebaseAuth = Firebase.auth

    @Provides
    fun provideFirestore(): FirebaseFirestore {
        // 自定义持久化缓存设置(可选,默认配置已满足大部分场景)
        val cacheSettings = PersistentCacheSettings.newBuilder()
            // 设置缓存大小,可选无限制或指定字节数
            .setCacheSizeBytes(PersistentCacheSettings.CACHE_SIZE_UNLIMITED)
            .build()

        val firestoreSettings = FirebaseFirestoreSettings.Builder()
            .setLocalCacheSettings(cacheSettings)
            // 可选:Android 11+ 启用多标签页持久化
            // .setMultiTabPersistentCacheEnabled(true)
            .build()

        val firestore = FirebaseFirestore.getInstance()
        firestore.firestoreSettings = firestoreSettings
        return firestore
    }
}

注意:不要使用FirebaseFirestore.getInstance(settings),先获取实例再设置settings是Firestore推荐的配置方式。

2. Application类无需额外配置

Hilt的SingletonComponent会在Application初始化时提供配置好的Firestore单例,因此AppHiltApp的onCreate方法无需添加离线模式相关代码:

@HiltAndroidApp
class AppHiltApp : Application() {
    override fun onCreate() {
        super.onCreate()
        // 无需额外配置离线模式
    }
}

离线模式验证与注意事项

  • 数据监听:使用addSnapshotListener而非一次性获取数据,Firestore会自动在离线时返回本地缓存数据,恢复网络后同步最新数据并触发回调。
  • 写入操作:离线时的写入会先保存到本地缓存,网络恢复后自动同步到服务器,无需手动处理。
  • 缓存清理:若需清空本地缓存,可调用firestore.clearPersistence(),但此操作会删除所有本地缓存数据。

内容的提问来源于stack exchange,提问作者Collaxd

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.02 11:42:39