我只想在用户首次登录时才将其数据写入数据库。我不想一遍又一遍地写它。我为此编写了一个方法,但是有一个问题,因为在for循环中有多个值。我该如何解决这个问题?
public void writeFirebase() {
final Users users = new Users();
final List<String> arrayList = new ArrayList<>();
myRef.child("Users").addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
for (DataSnapshot ds : dataSnapshot.getChildren()) {
arrayList.add(ds.getKey());
}
if (arrayList.size() > 0){
for (String cur : arrayList) {
if (cur.matches(mUser.getUid())) {
} else {
Log.e("preee",""+cur);
if (mUser.getPhotoUrl() != null) {
users.setUserProfilPic(mUser.getPhotoUrl().toString());
}
if (mUser.getDisplayName() != null) {
users.setUserName(mUser.getDisplayName());
}
users.setUserId(mUser.getUid());
users.setUserPremium(false);
users.setUserPremiumDate("free");
users.setUserEmail(mUser.getEmail());
myRef.child("Users").child(mUser.getUid()).setValue(users);
}
}
}else {
users.setUserId(mUser.getUid());
users.setUserPremium(false);
users.setUserEmail(mUser.getEmail());
users.setUserName(mUser.getDisplayName());
users.setUserProfilPic(mUser.getPhotoUrl().toString());
users.setUserPremiumDate("free");
myRef.child("Users").child(mUser.getUid()).setValue(users);
}
}
@Override
public void onCancelled(@NonNull DatabaseError databaseError) {
}
});
}
答案 0 :(得分:0)
如果要一次在数据库中写入用户数据并阻止再次写入,则只需检查该用户是否已在数据库中。 (在此答案中,我认为您担心的是您的用户的存在,例如,您可能不想让用户更新他的电子邮件地址(如果他已经输入过一次)。因此,您只需检查用户是否曾经输入过电子邮件即可或不。) 对于我的示例(用户存在),我提供了一些链接,可帮助您检查用户是否已在数据库中。
How to search if a username exist in the given firebase database?
How to search if a username exist in the given firebase database?
How to check if a value exists in firebase database - android
只是搜索并查找您的用户是否已经在数据库中。在进行任何操作之前,请检查此ifs。如果他不是,您将允许他继续。