我当前的firebase系统允许我使用firebase createuser()接收电子邮件和密码注册新用户。在oncomplete方法中,我还会使用用于注册的详细信息,以便电子邮件和密码以及其他一些变量我创建诸如用户名和DOB,并使用以下代码将它们保存到firebase数据库:
// ...database code above
DatabaseReference users = database.getReference("users");
User user = new User(username, password,DOB,email);
users.push().setValue(user);
我不知道如何做以上任何一项,非常感谢任何帮助。我已经使用了stackoverflow搜索,并意识到有问题的帖子已经被问过,我已经尝试了一些这些无效的解决方案,因为每个人的数据库结构都不同
答案 0 :(得分:2)
让我关注目前的第一个问题。 唯一用户名。
在Firebase中进行更多检索的一个关键方面是构建数据。结构如何决定应用程序的功能效率。
对于唯一的用户名,我在您的Firebase数据库中建议了类似的内容。
在上面的数据库结构中,我为不可用的用户名创建了一个单独的节点(因为 某些 值是必需的)。因此,每次我必须检查时,我都不必查看 USERS 节点的其他详细信息。
在您的应用程序中,您可以通过这种方式使用它来存储用户名。
FirebaseDatabase database = FirebaseDatabase.getInstance();
DatabaseReference takenNames = database.getReference("TakenUserNames");
.
.
.
//On Successful Registeration
.
takenNames.child(username).setValue(true);
在注册时,您可以像这样检索该值:
public boolean doesNameExist(final String sUsername)
{
theTakenNameRef = database.getReference("TakenUserName");
theTakenNameRef.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
if(dataSnapshot.hasChild(sUsername))
{
isTaken = true;
}
else if (!dataSnapshot.hasChild(sUsername))
{
isTaken = false;
}
}
@Override
public void onCancelled(DatabaseError databaseError) {
Toast.makeText(mContext, "Connection Error. Please try again in some time.", Toast.LENGTH_SHORT).show();
}
});
return isTaken;
}
.
.
.
.
.
.
//Calling it in method
String username = editText.getText().toString().trim().toUpperCase();
boolean exists = doesNameExist(username);
if(exists)
{
//Show Error
}
else
{
//Continue Registration
}
}
希望这可以清楚地检查唯一用户名的效率。
使用这种机制,你也可以把你的逻辑放在第二个问题上。