我有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.
因此,我的 CompletionListener 始终为错误变量返回null。
如果数据库中有现有用户,如何阻止返回null?
答案 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()
}
}
}