Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/219.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
Firebase Android-检查值是否已存在_Android_Firebase - Fatal编程技术网

Firebase Android-检查值是否已存在

Firebase Android-检查值是否已存在,android,firebase,Android,Firebase,我需要有关检查该值是否已存在于数据库中的帮助,以便用户在更新时无法将其更改为相同的数字,例如唯一ID 我已经寻找了几个小时的解决方案,但我找不到任何有效的 要实现这一点,我建议您创建另一个名为userIds的节点。每次创建新用户时,只需在此新部分中添加用户id。此新部分应如下所示: Firebase-root --- userIds --- Id101: true --- Id102: true 然后在这个新节点上放置一个侦听器,并在dataSnapshot对象

我需要有关检查该值是否已存在于数据库中的帮助,以便用户在更新时无法将其更改为相同的数字,例如唯一ID

我已经寻找了几个小时的解决方案,但我找不到任何有效的


要实现这一点,我建议您创建另一个名为
userIds
的节点。每次创建新用户时,只需在此新部分中添加用户id。此新部分应如下所示:

Firebase-root
    --- userIds
      --- Id101: true
      --- Id102: true

然后在这个新节点上放置一个侦听器,并在dataSnapshot对象上使用
exists()
方法。

要实现这一点,我建议您创建另一个名为
userIds
的节点。每次创建新用户时,只需在此新部分中添加用户id。此新部分应如下所示:

Firebase-root
    --- userIds
      --- Id101: true
      --- Id102: true

然后只需在这个新节点上放置一个侦听器,并在dataSnapshot对象上使用
exists()
方法。

正如之前建议的那样,您应该有一个数据结构和索引列表,为什么?因为当你有很多这样的ID时,它将是一个更好的查询。然而,我认为你正在努力做的是对前面建议的补充

您需要做的是使用单个事件侦听器,如果datasnapshot不为null,则该值存在。关键是查询您需要的id:

DatabaseReference root = FirebaseDatabase.getInstance.getReference();
DatabaseReference reference = root.child("Test").oderByChild("ID").equalsTo(someId);

reference.addSingleValueEventListener(new ValueEventListener() {
    @Override
    public void onDataChange(DataSnapshot dataSnapshot) {
       if (dataSnaphot != null) {
       //This means the value exist, you could also dataSnaphot.exist()
       }
    }
    //More auto generated code
);
dataSnapshot
是一组对象,因为查询可以匹配多个结果。如果需要每个的值,可以在其中进行迭代:

public void onDataChange(DataSnapshot dataSnapshot) {
           if (dataSnaphot != null) {
           for (DataSnapshot children : dataSnaphot.getChildrens()) {
               YourModel yourModel = children.getValue(YourModel.class);
           }
           }
        }

正如之前建议的那样,您应该有一个数据结构,一个索引列表,为什么?因为当你有很多这样的ID时,它将是一个更好的查询。然而,我认为你正在努力做的是对前面建议的补充

您需要做的是使用单个事件侦听器,如果datasnapshot不为null,则该值存在。关键是查询您需要的id:

DatabaseReference root = FirebaseDatabase.getInstance.getReference();
DatabaseReference reference = root.child("Test").oderByChild("ID").equalsTo(someId);

reference.addSingleValueEventListener(new ValueEventListener() {
    @Override
    public void onDataChange(DataSnapshot dataSnapshot) {
       if (dataSnaphot != null) {
       //This means the value exist, you could also dataSnaphot.exist()
       }
    }
    //More auto generated code
);
dataSnapshot
是一组对象,因为查询可以匹配多个结果。如果需要每个的值,可以在其中进行迭代:

public void onDataChange(DataSnapshot dataSnapshot) {
           if (dataSnaphot != null) {
           for (DataSnapshot children : dataSnaphot.getChildrens()) {
               YourModel yourModel = children.getValue(YourModel.class);
           }
           }
        }

例如,如果当前ID为102,他们将无法将其更改为101。例如,如果当前ID为102,他们将无法将其更改为101。关于数据结构,您肯定是对的,但为什么不为exist方法创建一个数据库规则呢?这是最简单的方法。ID是否将连接到用户?@J.Doe我该怎么做?我昨晚研究了数据库规则,但这让我非常困惑:|在这种情况下,只需遵循上面的指示,您的问题就会得到解决;)关于数据结构,您肯定是对的,但是为什么不为exist方法创建一个数据库规则呢?这是最简单的方法。ID会连接到用户吗?@J.Doe我该怎么做?我昨晚研究了数据库规则,但这让我非常困惑:|在这种情况下,只需遵循上面的指示,您的问题就会得到解决;)