Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/390.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
Java android firebase db,检查id重复问题_Java_Android_Database_Firebase - Fatal编程技术网

Java android firebase db,检查id重复问题

Java android firebase db,检查id重复问题,java,android,database,firebase,Java,Android,Database,Firebase,我想检查身份证是否重复 我想做身份证重复检查代码。 因此,我通过使用sid=id.getText().toString().trim()从用户处获取键入的id 然后制作jsontreesFirebaseDatabase.getInstance().getReference().child(“用户”).child(“id”).setValue(“添加”) 通过使用child()方法… 并使用setvalue()方法输入值。 因为无法使用ondatachange()方法。。。(我认为这种方法只有在有

我想检查身份证是否重复

我想做身份证重复检查代码。
因此,我通过使用
sid=id.getText().toString().trim()从用户处获取键入的id
然后制作
json
trees
FirebaseDatabase.getInstance().getReference().child(“用户”).child(“id”).setValue(“添加”)
通过使用child()方法…
并使用
setvalue()
方法输入值。
因为无法使用
ondatachange()
方法。。。(我认为这种方法只有在有数据时才有效,所以我放了一些没有用的数据)稍后我将删除
setvalue()
方法中的值(即使没有更改,是否还有其他方法可以使用…我需要检查db内容) 无论如何
if(data.getValue()==sid)
此部分
我想它可以检查id…
但它不起作用

12-25 21:06:00.771 6700-6700/com.example.pc.login D/myTag:{id=add}

android日志看起来像这样。。。id是子部分。。。加起来就是我放的值 这是
getvalue()
方法的结果

总结 : 1.如何将用户id放入
firebase
db 2.如何获取除子零件外的唯一id值 当我使用
getvalue()
方法时。它接受子名称和我输入的值

所以如果id存在…用户自制。。。用户应该写另一个。。。 如果不是。。。
firebase
db存储用户制作的id

谢谢你阅读。。。帮帮我

idcheckbtn.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                //store the id user created
                sid = id.getText().toString().trim();

FirebaseDatabase.getInstance().getReference().child("users").child("id").setValue("add");



FirebaseDatabase.getInstance().getReference().addListenerForSingleValueEvent(new ValueEventListener() {
                @Override
                public void onDataChange(DataSnapshot dataSnapshot) {
                    for(DataSnapshot data: dataSnapshot.getChildren()){
                        if (data.getValue()==sid) {
                            Log.d("myTag",""+dataSnapshot.getChildren());
                            Toast.makeText(MainActivity.this, "aleady exists",Toast.LENGTH_SHORT).show();


                        } else {
                            Toast.makeText(MainActivity.this, "you can use this id",Toast.LENGTH_SHORT).show();
                            FirebaseDatabase.getInstance().getReference().child("users").child("id").setValue(sid);
                            Log.d("myTag",""+data.getValue());
                        }
                    }
                }


                @Override
                public void onCancelled(@NonNull DatabaseError databaseError) {

                }


            });
        }
    });
因为无法使用ondatachange()方法。。。(我认为这种方法只有在有数据的情况下才有效,所以我放了一些没有用处的数据)

连接侦听器时,无论是否有数据,都不会触发一次onDataChange(DataSnapshot DataSnapshot)
方法

如果附加了
ValueEventListener
的数据库路径为空/null/不存在,则
dataSnapshot.exits()
将返回
false

因此,这里可以是您的最终代码:

idcheckbtn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
    sid = id.getText().toString().trim();

    // No need to store the id user created
    // FirebaseDatabase.getInstance().getReference().child("users").child("id").setValue("add");

    FirebaseDatabase.getInstance().getReference().child(sid).addListenerForSingleValueEvent(new ValueEventListener() {
        @Override
        public void onDataChange(DataSnapshot dataSnapshot) {
            if (dataSnapshot.exists()) {
                // sid already exists
            } else {
                // sid does not exists already
            }
        }

        @Override
        public void onCancelled(@NonNull DatabaseError databaseError) {

        }
    });
}
});
顺便说一下,Firebase数据库的外观如下:

{
    "sid_1": "...",
    "sid_2": "..."
}

谢谢你友好的回答。但我还是不能理解。您的意思是,无论是否有数据更改,addListener方法都将被激活?我问你这个是因为。。。当我没有在我写的代码中添加一些像“add”这样的词时,这个方法就没有完成。