Android 如何在以下结构中更新用户
假设我的用户正在访问世界上的各个地方,并且数据库如下所示,那么从旧地方删除该用户并将其放在新地方的最佳做法是什么 首先,用户位于Android 如何在以下结构中更新用户,android,firebase,firebase-realtime-database,Android,Firebase,Firebase Realtime Database,假设我的用户正在访问世界上的各个地方,并且数据库如下所示,那么从旧地方删除该用户并将其放在新地方的最佳做法是什么 首先,用户位于位置A: database | places |___location A | |___user1: "exact coordinates" | |___location B |___user2: "exact coordinates" 这就是我希望在将user1
位置A
:
database
|
places
|___location A
| |___user1: "exact coordinates"
|
|___location B
|___user2: "exact coordinates"
这就是我希望在将user1
移动到位置B
后的外观:
database
|
places
|___location B
|___user1: "exact coordinates"
|___user2: "exact coordinates"
如何将用户1
从位置A
移除时移动到位置B
?
我很难找到正确的语法来简单地将(唯一标识的)
user1从旧位置删除到新位置。使用当前数据库结构时,为了更改用户的位置,您需要执行3个操作:
读取用户的当前位置:
database -> places -> location A -> user1
将当前位置复制到新位置:
database -> places -> location B -> user1
database -> places -> location A
删除旧位置:
database -> places -> location B -> user1
database -> places -> location A
这可以通过使用单个更新操作来解决。在这种情况下,你应该考虑改变你的数据库结构有点像:
Firebase-root
|
--- users
|
--- uid
|
--- lat: 48.856151
|
--- long: 2.298115
为了更新用户的位置,您应该只更新这两个属性,如以下代码行所示:
String uid = FirebaseAuth.getInstance().getCurrentUser().getUid();
DatabaseReference rootRef = FirebaseDatabase.getInstance().getReference();
DatabaseReference uidRef = rootRef.child(uid);
Map<String, Object> map = new HashMap<>();
map.put("lat", 41.890362);
map.put("long", 12.492263);
uidRef.updateChildren(map);
String uid=FirebaseAuth.getInstance().getCurrentUser().getUid();
DatabaseReference rootRef=FirebaseDatabase.getInstance().getReference();
DatabaseReference uidRef=rootRef.child(uid);
Map Map=newhashmap();
地图放置(“lat”,41.890362);
地图.put(长),12.492263 ;;
uidRef.更新儿童(地图);
使用当前数据库结构时,为了更改用户的位置,需要执行3个操作:
读取用户的当前位置:
database -> places -> location A -> user1
将当前位置复制到新位置:
database -> places -> location B -> user1
database -> places -> location A
删除旧位置:
database -> places -> location B -> user1
database -> places -> location A
这可以通过使用单个更新操作来解决。在这种情况下,你应该考虑改变你的数据库结构有点像:
Firebase-root
|
--- users
|
--- uid
|
--- lat: 48.856151
|
--- long: 2.298115
为了更新用户的位置,您应该只更新这两个属性,如以下代码行所示:
String uid = FirebaseAuth.getInstance().getCurrentUser().getUid();
DatabaseReference rootRef = FirebaseDatabase.getInstance().getReference();
DatabaseReference uidRef = rootRef.child(uid);
Map<String, Object> map = new HashMap<>();
map.put("lat", 41.890362);
map.put("long", 12.492263);
uidRef.updateChildren(map);
String uid=FirebaseAuth.getInstance().getCurrentUser().getUid();
DatabaseReference rootRef=FirebaseDatabase.getInstance().getReference();
DatabaseReference uidRef=rootRef.child(uid);
Map Map=newhashmap();
地图放置(“lat”,41.890362);
地图.put(长),12.492263 ;;
uidRef.更新儿童(地图);
使用一个事务同时执行两个CRUD操作怎么样?但这是firebase数据库,还是我完全离开了?(对不起,我是初学者)为用户和位置使用单独的分支users->user_1->{location,coords}
。可能位置是附近用户id的列表locations->location->{user\u id:timestamp}
。抛出触发器从旧位置删除用户ID。James,是的,这应该是附近用户ID的列表,你怎么知道的D.你有没有一个地方可以让我看到如何有效地做到这一点?@JamesPoag,作为一个初学者,我在android Java代码的onWrite
链接中找不到onWrite
之间的关系。我将如何在Android Studio的项目中使用onWrite
?如何使用一个事务来执行两个CRUD操作?但这是firebase数据库,还是我完全离开了?(对不起,我是初学者)为用户和位置使用单独的分支users->user_1->{location,coords}
。可能位置是附近用户id的列表locations->location->{user\u id:timestamp}
。抛出触发器从旧位置删除用户ID。James,是的,这应该是附近用户ID的列表,你怎么知道的D.你有没有一个地方可以让我看到如何有效地做到这一点?@JamesPoag,作为一个初学者,我在android Java代码的onWrite
链接中找不到onWrite
之间的关系。我将如何在Android Studio中的项目中使用onWrite
?当您使用updateChildren(map)
时,它会自动从数据库中的旧位置删除旧记录吗?在这种情况下,没有旧位置和新位置。只有一个地方可以创建单个更新操作。换言之,您可以使用新的ONCE更新当前位置。就这样!是的,我注意到了。但是在这种情况下,通过lat和long查找near-by-userid的策略是什么?你能帮我加个密码吗?当数据库的结构与代码类似时,如何仅为附近的用户遍历树?我不知道从哪里开始!因为如果有很多用户,这将是不合适的搜索。首先,你要根据lat检查附近的所有用户,然后如果lat正确,你还需要匹配long。这真的有点太宽泛了,不能合理地用一条评论来回答。您最初的问题是如何在以下结构中更新用户
,因此希望我能够为您提供最佳解决方案。为了遵循这个统一的规则,请发布一个新的问题,这样我和其他用户可以帮助你。如果你认为我的答案帮助你为你首先提出的,请考虑接受它。我会很感激的。谢谢当您使用updateChildren(map)
时,它会自动从数据库中的旧位置删除旧记录吗?在这种情况下,没有旧位置和新位置。只有一个地方可以创建单个更新操作。换言之,您可以使用新的ONCE更新当前位置。就这样!是的,我注意到了。但是在这种情况下,通过lat和long查找near-by-userid的策略是什么?你能帮我加个密码吗?当数据库的结构与代码类似时,如何仅为附近的用户遍历树?我不知道从哪里开始!因为如果有很多用户,这将是不合适的搜索。首先你检查所有的u