Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/192.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 如何在以下结构中更新用户_Android_Firebase_Firebase Realtime Database - Fatal编程技术网

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