gpt4 book ai didi

android - 控制firebase数据库中onChildAdded事件的发生

转载 作者:行者123 更新时间:2023-11-30 00:36:04 24 4
gpt4 key购买 nike

我正在开发 Android 应用程序,我想在其中将用户的唯一 ID 存储在 firebase 数据库中,因此为了实现这一点,我创建了一个名为“Users”的根目录,并将在该根目录中存储所有用户的唯一 ID。

因此,为了检查唯一性,我必须遍历“Users”的每个子项,在检查唯一性之后,我会将 uniqueID 添加到“Users”根目录,或者通知用户 uniqueId 不可用。

当我检查唯一性时,条件 (if/else) 在 OnChildAdded 事件发生之前执行,如何在 OnChildAdded 事件发生后执行一些代码(在我的代码中提到)

我的代码

postBtn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
if(!uniqueIdText.getText().toString().trim().equals("")) {
uniqueness = true;
users.addChildEventListener(new ChildEventListener() {
@Override
public void onChildAdded(DataSnapshot dataSnapshot, String s) {
if (dataSnapshot.getKey().equals(uniqueIdText.getText().toString().trim()))
uniqueness = false;

}

@Override
public void onChildChanged(DataSnapshot dataSnapshot, String s) {

}

@Override
public void onChildRemoved(DataSnapshot dataSnapshot) {

}

@Override
public void onChildMoved(DataSnapshot dataSnapshot, String s) {

}

@Override
public void onCancelled(DatabaseError databaseError) {

}

});
}
else if(uniqueIdText.getText().toString().trim().equals("") )
Toast.makeText(LoginActivity.this,"Please enter id",Toast.LENGTH_LONG).show();

//======================How to execute it(code below) after occurrence of OnChildAdded event====================
if (uniqueness){
DatabaseReference usersInfo = users.child(uniqueIdText.getText().toString().trim());
startActivity(new Intent(LoginActivity.this, MainActivity.class));
}
else{
if(!uniqueIdText.getText().toString().trim().equals(""))
Toast.makeText(LoginActivity.this, "ID not available, Please enter a new one", Toast.LENGTH_SHORT).show();
}


}
});

最佳答案

无法知道何时调用了所有 onChildAdded 事件。但是您可以使用 ValueEventListener 知道数据库中的第一条数据何时同步。

但在这种情况下,我强烈建议采用不同的方法。下载所有 UID 以检查一个值是否存在是非常低效的,并且无法扩展。相反,将监听器附加到您要查找的特定 UID。如果该值存在,您将获得该值。如果它不存在,您将得到一个空快照:

users.child(uniqueIdText.getText().toString()).addSingleValueEventListener(@Override
public void onDataChange(DataSnapshot dataSnapshot) {
if (dataSnapshot.exists()) {
uniqueness = false;
}
else {
uniqueness = true;
}
...
}

@Override
public void onCancelled(DatabaseError databaseError) {
Log.w(TAG, "onCancelled", databaseError.toException());
// ...
}
};

关于android - 控制firebase数据库中onChildAdded事件的发生,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43406326/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com