Android Studio中如何修改FirebaseReference对应的实时数据库URL
解决方案
- 方案1:调用
FirebaseDatabase.getInstance()时显式传入你的东南亚区域数据库URL
无参调用getInstance()时,Firebase会默认使用美国区域的firebaseio.com后缀地址,非默认区域的数据库必须手动传入完整地址才能正确访问。同时你原代码存在逻辑缺陷:直接给Users根节点执行setValue会覆盖整个Users表的所有数据,需要把新用户数据写入到对应用户UID的子节点下,修改后的代码如下:
// 显式传入东南亚区域实时数据库URL获取实例 myRef = FirebaseDatabase.getInstance("https://chatapp-5e8ce-default-rtdb.asia-southeast1.firebasedatabase.app/").getReference("Users"); String currUserId = FirebaseAuth.getInstance().getCurrentUser().getUid(); User user = new User(username, "default"); // 写入对应用户UID的子节点,避免覆盖全表数据 myRef.child(currUserId).setValue(user) .addOnCompleteListener(new OnCompleteListener<Void>() { @Override public void onComplete(@NonNull Task<Void> task) { if (task.isSuccessful()){ // 写入成功逻辑 } else{ // 写入失败可调用task.getException()打印具体错误信息 } } });
- 方案2:更新项目配置文件
如果你不想每次调用都手动写URL,可以进入Firebase控制台的项目设置页面,下载最新的google-services.json(安卓端)/GoogleService-Info.plist(iOS端)配置文件,替换项目中原有的旧文件。新配置文件已经包含了你东南亚区域的数据库地址,之后直接调用无参的FirebaseDatabase.getInstance()就会自动匹配正确的URL。 - 额外注意事项
操作完成后先清理项目缓存、重新构建运行,避免旧配置残留导致不生效;同时确认实时数据库的规则已经开放了对应写入权限,测试阶段可以临时设置为仅允许认证用户操作自己的数据:
{ "rules": { "Users": { "$uid": { ".write": "$uid === auth.uid", ".read": "$uid === auth.uid" } } } }
内容的提问来源于stack exchange,提问作者iwil wildan
相关产品推荐
相关产品推荐

