注册时为Firebase用户新增currentLocation字段,无对应更新方法如何处理
你搞错了两个模块的职责边界:FirebaseUser是Firebase Auth认证模块的类,仅负责管理身份认证相关的核心字段(邮箱、密码、手机号、昵称头像这些认证内置字段),你自己存在Realtime Database里的currentLocation等自定义业务字段,本来就不属于Auth的管理范围,不需要也不能修改FirebaseUser类来实现更新。
最优实现方式就是直接操作Realtime Database的对应用户节点更新字段,修改你的Dashboard.java代码即可:
usedLocationClient.getLastLocation() .addOnSuccessListener(this, new OnSuccessListener<Location>() { @Override public void onSuccess(Location location) { if (location != null) { FirebaseUser fUser = FirebaseAuth.getInstance().getCurrentUser(); // 先校验用户登录状态避免空指针 if (fUser == null) return; // 拼接位置信息,可根据你的业务需求调整格式,也可以分开存latitude、longitude两个字段方便后续查询 String locationStr = location.getLatitude() + "," + location.getLongitude(); // 直接获取Realtime Database中对应用户的currentLocation节点写入数据 DatabaseReference userRef = FirebaseDatabase.getInstance().getReference("Users") .child(fUser.getUid()) .child("currentLocation"); userRef.setValue(locationStr) .addOnSuccessListener(aVoid -> { // 写入成功的回调逻辑 }) .addOnFailureListener(e -> { // 写入失败的异常处理逻辑 }); } } });
补充注意点
- 如果后续要实现附近用户查询功能,推荐把位置拆成
latitude(纬度)和longitude(经度)两个数值类型字段存储,方便后续用GeoHash或者范围查询筛选附近用户,不需要拼接成字符串。 - 操作数据库前建议保留用户登录状态校验,避免用户登出状态下出现空指针异常。
- 可根据业务需要补充写入成功/失败的回调处理,做对应的用户提示。
内容的提问来源于stack exchange,提问作者devo9191
相关产品推荐
相关产品推荐

