Firebase添加相同的密钥始终没有错误

时间:2018-05-22 12:09:49

标签: java android firebase firebase-realtime-database firebase-authentication

我有android项目。我在我的应用中使用Firebase数据库进行聊天室。

我有一个创建用户的功能,在此功能中我将所有新用户添加为,而不是将其设为唯一值。没问题,如果我尝试添加具有现有名称的新用户,我无法添加新用户。

但是我始终获取 null 错误,尽管我尝试添加具有相同名称的新用户。如果我尝试添加具有相同名称的新用户,我想我应该收到错误。

的createUser:

private void createUser(final String uname){
    DatabaseReference dbref = firedb.getReference();

    final String testedUname = uname ;
    dbref.child("User").child(uname).setValue(true, new DatabaseReference.CompletionListener() {

        @Override
        public void onComplete(DatabaseError error, DatabaseReference ref) {

            if (error != null) {

               Log.d("firebaseTest","tested_uname: " + testedUname + " Data could not be saved. " + error.getMessage());
               requestNewUser();
            } else {

                Log.d("firebaseTest","tested_uname: " + testedUname + " Data saved successfully." );

                //Always, this else statement works although I write same username.
            }

        }
    });
}

我添加了新的5个值。

  

AAABBB

     

AAABBB(!)

     

AABBCC

     

Aa11aa

     

AABBCC(!)

我认为在第2行和第5行,当这些文本存在于数据库中时,代码应该给出输出:

  

无法保存数据。

但它总是给出输出:

  

数据已成功保存。

05-22 14:32:20.346 13402-13402/xxx D/firebaseTest: tested_uname: Aaabbb Data saved successfully.
05-22 14:32:34.666 13402-13402/xxx D/firebaseTest: tested_uname: Aaabbb Data saved successfully.
05-22 14:32:51.176 13402-13402/xxx D/firebaseTest: tested_uname: Aabbcc Data saved successfully.
05-22 14:33:06.026 13402-13402/xxx D/firebaseTest: tested_uname: Aa11aa Data saved successfully.
05-22 14:33:22.826 13402-13402/xxx D/firebaseTest: tested_uname: Aabbcc Data saved successfully.

final database in firebase

因此,我的 CompletionListener 始终为错误变量返回null。

如果数据库中有现有用户,如何阻止返回null?

1 个答案:

答案 0 :(得分:0)

试试这个:

DatabaseReference reference = database.getReference("User").child(uname);
reference.addValueEventListener(new ValueEventListener() {
    @Override
    public void onDataChange(DataSnapshot dataSnapshot) {

         if (dataSnapshot.exists()) {
            // User already exists       
        } else {
            //CreateUser()
        }
    }
}