【问题标题】:android firebase db , checking id duplication problemandroid firebase db,检查 id 重复问题
【发布时间】:2018-12-26 11:11:22
【问题描述】:

我想检查 id 重复

我想制作 id 重复校验码。
所以我得到了用户使用sid = id.getText().toString().trim();
输入的ID 然后制作jsonFirebaseDatabase.getInstance().getReference().child("users").child("id").setValue("add");
通过使用 child() 方法 ...
并使用setvalue() 方法输入值。
因为不可能使用ondatachange() 方法...(我认为这种方法只有在有数据时才有效,所以我放了一些没有用的数据)我稍后会删除setvalue() 方法中的值(还有其他即使没有变化也可以使用的方法...我需要检查数据库内容) 无论如何if (data.getValue()==sid)这部分
我认为它可以检查 id ...
但它不起作用

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

android 日志看起来像这样... id 是子部分... add 是我输入的值 那是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) {

                }


            });
        }
    });

【问题讨论】:

    标签: java android database firebase


    【解决方案1】:

    因为无法使用 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'这样的词时。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-09-07
    • 2018-03-21
    • 1970-01-01
    • 1970-01-01
    • 2016-08-18
    相关资源
    最近更新 更多