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

Firebase Realtime Database传入URL与配置地址不匹配报错排查

问题描述

在项目SignUpActivity中尝试向Firebase Realtime Database传输用户数据时,复制Realtime Database控制台展示的URL创建DatabaseReference实例,编写代码如下:

DatabaseReference databaseReference = FirebaseDatabase.getInstance().getReferenceFromUrl("https://quiz-project-6afd9-default-rtdb.europe-west1.firebasedatabase.app/");

应用启动时直接触发Fatal exception,核心报错信息为:传入getReference()的URL无效,传入URL需匹配项目已配置的Database URL,当前传入地址为https://quiz-project-6afd9-default-rtdb.europe-west1.firebasedatabase.app/,配置期望的地址为https://quiz-project-6afd9-default-rtdb.firebaseio.com。
完整运行异常日志如下:

2022-06-21 14:50:24.921 8323-8323/com.dinocodeacademy.maingoquizagain E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.dinocodeacademy.maingoquizagain, PID: 8323
java.lang.RuntimeException: Unable to instantiate activity ComponentInfo{com.dinocodeacademy.maingoquizagain/com.dinocodeacademy.com.SignUp}: com.google.firebase.database.DatabaseException: Invalid URL (https://quiz-project-6afd9-default-rtdb.europe-west1.firebasedatabase.app/) passed to getReference(). URL was expected to match configured Database URL: https://quiz-project-6afd9-default-rtdb.firebaseio.com
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3365)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3601)
at android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:85)
at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:135)
at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:95)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2066)
at android.os.Handler.dispatchMessage(Handler.java:106)
at android.os.Looper.loop(Looper.java:223)
at android.app.ActivityThread.main(ActivityThread.java:7656)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:592)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:947)
Caused by: com.google.firebase.database.DatabaseException: Invalid URL (https://quiz-project-6afd9-default-rtdb.europe-west1.firebasedatabase.app/) passed to getReference(). URL was expected to match configured Database URL: https://quiz-project-6afd9-default-rtdb.firebaseio.com
at com.google.firebase.database.FirebaseDatabase.getReferenceFromUrl(FirebaseDatabase.java:214)
at com.dinocodeacademy.com.SignUp.(SignUp.java:34)
at java.lang.Class.newInstance(Native Method)
at android.app.AppComponentFactory.instantiateActivity(AppComponentFactory.java:95)
at androidx.core.app.CoreComponentFactory.instantiateActivity(CoreComponentFactory.java:45)
at android.app.Instrumentation.newActivity(Instrumentation.java:1253)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3353)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3601)
at android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:85)
at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:135)
at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:95)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2066)
at android.os.Handler.dispatchMessage(Handler.java:106)
at android.os.Looper.loop(Looper.java:223)
at android.app.ActivityThread.main(ActivityThread.java:7656)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:592)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:947)
2022-06-21 14:50:24.969 8323-8323/com.dinocodeacademy.maingoquizagain I/Process: Sending signal. PID: 8323 SIG: 9

异常产生原因
  • 项目中存放的Firebase配置文件(Android端为app目录下的google-services.json)记录的Realtime Database地址,和代码里硬编码传入的地址不匹配,SDK初始化校验时直接抛出异常。
  • 这类问题基本都是两种场景触发:一是在Firebase控制台新建了指定欧洲区域的Realtime Database实例后,没有重新下载最新的配置文件替换项目里的旧文件;二是直接复制了控制台显示的新区域库地址,但本地配置默认关联的还是最早创建的美国中心默认库,两边域名后缀对不上。
  • 报错信息已经明确标注差异:配置默认的地址是美国区默认域名后缀*.firebaseio.com,代码传入的是欧洲区的新域名后缀*.firebasedatabase.app,地址校验不通过就会触发致命崩溃。
对应解决方法

根据自身业务场景选任意一种方案处理即可:

  • 最稳妥的通用方案(规避硬编码风险):不要手动硬编码数据库URL,SDK会自动读取本地配置文件里预置的地址,代码直接修改为:
    // 自动读取本地google-services.json中的配置地址,无需手动传参
    DatabaseReference databaseReference = FirebaseDatabase.getInstance().getReference();
    
    如果业务本来就要使用欧洲区的库存放数据,直接去Firebase控制台的项目设置页,重新下载最新的google-services.json文件,替换掉项目app目录下的旧配置文件,重新同步依赖编译运行即可。
  • 临时快速修复方案:直接把代码里硬编码的URL替换为报错提示中给出的期望配置地址:
    DatabaseReference databaseReference = FirebaseDatabase.getInstance().getReferenceFromUrl("https://quiz-project-6afd9-default-rtdb.firebaseio.com");
    
    注意:如果实际业务数据是存储在欧洲区的新库中,用这个方法会连接到最早创建的美国区默认库,后续会出现写入数据查询不到的问题,这种场景必须使用第一种方案更新配置文件。
  • 多库访问场景方案:如果需要在同一个App内访问多个不同区域的Realtime Database实例,给每个库单独调用FirebaseDatabase.getInstance(对应库的URL)初始化实例即可,同时要给对应库配置正确的读写权限规则。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 15:39:15