我目前正在开发一个Android应用程序,我使用Firebase(实时功能)作为后端服务。此外,我开发了这个功能,如下所示。
private void checkUserExisting (){
Dataa = mRef.getReference().child("Users");
Dataa.addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
if (!dataSnapshot.exists()){
CreateUserProfile();
}else {
final String Uname = name.getText().toString().trim();
final String Email = emailAddress.getText().toString().trim();
Iterator<DataSnapshot> dataSnapshots = dataSnapshot.getChildren().iterator();
while (dataSnapshots.hasNext())
{
DataSnapshot dataSnapshotChild = dataSnapshots.next();
String EmailAddress = dataSnapshotChild.child("Email").toString();
String UserName = dataSnapshotChild.child("UserName").toString();
if (Uname.equals(UserName) || Email.equals(EmailAddress)){
Toast.makeText(Sgin_Up.this,"This user already exists",Toast.LENGTH_LONG).show();
break;
}else {
CreateUserProfile();
}
}
}
}
@Override
public void onCancelled(DatabaseError databaseError) {
}
});
扩展代码工作得很好,它检查现有数据并显示Toast消息,但在数据仍进入数据库后,我想消除重复数据。
您现在正在循环内创建。这意味着每次它找到一个不适合该新用户的节点时,都会发生这种情况。这显然不是您想要的,因为只有当没有任何节点与新用户匹配时,才应该创建新概要文件。所以它必须在循环之外:
public void onDataChange(DataSnapshot dataSnapshot) {
bool foundUser = false;
final String Uname = name.getText().toString().trim();
final String Email = emailAddress.getText().toString().trim();
Iterator<DataSnapshot> dataSnapshots = dataSnapshot.getChildren().iterator();
while (!foundUser && dataSnapshots.hasNext()) {
DataSnapshot dataSnapshotChild = dataSnapshots.next();
String EmailAddress = dataSnapshotChild.child("Email").toString();
String UserName = dataSnapshotChild.child("UserName").toString();
if (Uname.equals(UserName) || Email.equals(EmailAddress)){
Toast.makeText(Sgin_Up.this,"This user already exists",Toast.LENGTH_LONG).show();
foundUser = true;
}
}
if (!foundUser){
CreateUserProfile();
}
}
创建新帐户或注册过程时,您可以检查用户是否已存在,例如:
.createUserWithEmailAndPassword(email, password).addOnCompleteListener(new OnCompleteListener<AuthResult>() {
@Override
public void onComplete(@NonNull Task<AuthResult> task) {
boolean isNewUser = task.getResult().getAdditionalUserInfo().isNewUser();
//retruns true if user is new
//false if user exits, move on login screen/forgot password etc.
}
})
而且,您已经阻止使用相同的电子邮件地址创建帐户,这实际上使得不必要的检查数据库中是否存在电子邮件地址,因为不可能再使用相同的电子邮件地址创建新帐户。
如果您仍然想检查数据库中存在的电子邮件地址,您可以运行简单的查询:
databaseReference.orderByChild("Email").equalTo(email).addListenerForSingleValueEvent....
如果电子邮件存在,则返回数据,如果数据库中没有该电子邮件的用户,则返回数据。
我在Android应用程序中使用Firebase实时数据库,并且有如下数据: 数据库映像 我想删除周末所有用户的“点”:选项卡。每个周末自动删除。我该怎么做呢。
问题内容: 某些数据库功能(例如和)很容易受到死锁的影响,因为数据库未指定将使用哪种锁定顺序。我发现有两次 讨论暗示此行为不是SQL标准指定的,更不用说具体的实现了。因此,我在假设我们无法控制锁定顺序的情况下进行操作(至少,这样做并不明显)。 如果我们不能依赖锁定顺序,应该如何避免数据库死锁? 如果我们不应该避免僵局(您将不得不非常努力地说服我),那么我们应该怎么做? 这个问题与数据库无关,所以请
我试图Conconat 2 DataFrames,但. Join正在创建一个不需要的副本。 我试过: 但这返回了一个我理解的错误(“concat未能重新索引,仅对唯一值的索引对象有效”) 我试着: 它没有给出错误,但给出以下数据帧: 我的问题是重复的10.1和400在时间戳1520259275。它们不在原始df_bid数据框中两次,应该只在这个df中出现一次。有两行相同的时间戳是正确的,因为此时有
我有下一个示例代码: 你可以看到id是JSON格式中的一个重复字段,我知道PostgreSQL有一些功能可以避免这个问题,但我找不到。
我正在一个聊天应用程序,其中消息存储在firebase实时数据库。现在,如果我创建一个如下所示的节点(Chats-Better-A-ID和-B-ID是自动生成的聊天室密钥),那么我想知道当用户S在聊天应用程序中打开与用户T聊天时,so数据库将只读取存储在Chats-Better-S-T-ID中的消息,而不会读取其他聊天室消息!?我说的对吗?如果是,那么它会降低定价吗? 或 如果我存储如下所示的数据
我正在尝试读取我的Flutter应用程序中的firebase实时数据库中的数据,并将其分配给模型类,但是,我在控制台中得到了以下错误。 下面是我到目前为止所做的代码 员工类别 我不知道我做错了什么,请帮我解决这个问题