Android Service中调用FireStore失败:数据库锁定错误
我之前也踩过这个Firestore内部错误的坑,尤其是在开启本地持久化之后,给你几个实际可行的排查和解决方向:
1. 立即升级Firestore版本
你用的0.6.6-dev是非常老旧的开发预览版,这类版本本身就存在很多未修复的bug,强烈建议升级到最新的稳定版。在你的项目build.gradle(Module级别)里更新依赖:
implementation 'com.google.firebase:firebase-firestore:24.10.0' // 替换为当前最新稳定版
记得同步项目后再测试。
2. 清除本地缓存数据
启用持久化后,Firestore会在本地存储缓存数据,如果缓存文件损坏就会触发这类内部错误。你可以:
- 进入设备的「应用设置」找到你的App
- 选择「存储」→「清除数据」(注意会清除App的所有本地数据,做好备份)
- 重启App后再尝试访问Firestore
3. 检查Firestore初始化逻辑
确保持久化配置是在Firestore实例创建前设置的,并且只初始化一次。推荐在自定义Application类的onCreate方法里完成初始化:
public class MyApp extends Application { @Override public void onCreate() { super.onCreate(); FirebaseFirestoreSettings settings = new FirebaseFirestoreSettings.Builder() .setPersistenceEnabled(true) .build(); FirebaseFirestore.getInstance().setFirestoreSettings(settings); } }
避免在多个Activity/Fragment里重复初始化Firestore实例,这可能导致内部状态冲突。
4. 排查存储权限与空间问题
虽然Firestore持久化不需要显式的存储权限,但如果设备剩余存储空间不足,或者App的存储权限被意外禁用,也可能导致缓存写入失败引发错误:
- 检查设备剩余存储空间,确保有足够空间给Firestore缓存
- 对于Android 6.0及以上系统,确认App已获取「存储权限」(如果需要的话可以在代码中动态申请)
5. 检查依赖版本兼容性
如果你的项目中还用到了其他Firebase组件(比如Auth、Storage),要确保它们的版本和Firestore保持一致,版本不匹配很容易引发内部兼容问题。比如:
// 确保所有Firebase依赖版本统一 implementation 'com.google.firebase:firebase-auth:24.0.0' implementation 'com.google.firebase:firebase-firestore:24.0.0' implementation 'com.google.firebase:firebase-core:21.1.1'
你遇到的错误信息:
java.lang.RuntimeException: Internal error in Firestore (0.6.6-dev).
at com.google.android.gms.internal.zzeyi.run(Unknown Source)
at android.os.Handler.handleCallback(Handler.java:751)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:154)
at android.app.ActivityThread.main(ActivityThread.java:6123)
at java.lang.reflect.Met...
内容的提问来源于stack exchange,提问作者Gouse Mohiddin

