如何解决Android Studio中Firebase报错“数据库位于不同区域无法重连”问题
问题根因
代码存在Firebase实例调用错误:你已传入正确的区域数据库URL初始化FirebaseDatabase,但没有将该实例赋值复用,后续调用无参FirebaseDatabase.getInstance()时,默认加载的是美国区域的数据库实例,和你实际创建的数据库区域不匹配,触发对应报错。
你收到的报错信息明确提示了区域不匹配问题:
W/PersistentConnection: pc_0 - Firebase Database connection was forcefully killed by the server. Will not attempt reconnect. Reason: Database lives in a different region. Please change your database URL
解决方案
按以下步骤修改即可:
- 确认Firebase控制台实时数据库的区域确实为asia-southeast1,复制的URL无多余字符、拼写完全正确
- 修改代码逻辑,复用带区域URL初始化的FirebaseDatabase实例,不要二次调用无参的
getInstance()方法 - 排查权限问题:确认实时数据库的规则允许已认证用户写入数据
修正后代码
progressBar.setVisibility(View.VISIBLE); mAuth.createUserWithEmailAndPassword(email,mobile) .addOnCompleteListener(new OnCompleteListener<AuthResult>() { @Override public void onComplete(@NonNull Task<AuthResult> task) { if(task.isSuccessful()){ RegData user = new RegData(name, email, mobile); // 存储初始化后的实例,后续直接复用该实例操作数据库 FirebaseDatabase regionDb = FirebaseDatabase.getInstance("https://bioapps-customer-services-default-rtdb.asia-southeast1.firebasedatabase.app/"); regionDb.getReference().child("RegData") .child(FirebaseAuth.getInstance().getCurrentUser().getUid()) .setValue(user).addOnCompleteListener(new OnCompleteListener<Void>() { @Override public void onComplete(@NonNull Task<Void> task) { progressBar.setVisibility(View.GONE); if(task.isSuccessful()){ Toast.makeText(SignUpActivity.this, "注册成功",Toast.LENGTH_LONG).show(); }else{ Toast.makeText(SignUpActivity.this, "注册失败,请重试",Toast.LENGTH_LONG).show(); // 可选:打印错误日志方便后续排查 // Log.e("注册失败", task.getException().getMessage()); } } }); }else{ progressBar.setVisibility(View.GONE); Toast.makeText(SignUpActivity.this, "注册失败,请重试",Toast.LENGTH_LONG).show(); } } });
如果修改后仍然报错,可以卸载应用清除本地缓存后重新安装测试,避免旧的配置残留影响。
内容的提问来源于stack exchange,提问作者nano_9
相关产品推荐
相关产品推荐

