android - 如何只将用户数据写入firebase数据库一次?
问题描述
我只想在用户第一次登录时将用户的数据写入数据库。我不想一遍又一遍地写。我为此编写了一个方法,但是我遇到了一个问题,因为 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) {
}
});
}
解决方案
如果您想在数据库中写入一次用户数据并防止再次写入,您只需要检查该用户是否已经在您的数据库中。(在这个答案中,我认为您关心的是您的用户存在,它可以是其他任何东西,例如,如果用户已经输入过一次,您可能不想让用户更新他的电子邮件地址。所以您只需检查用户之前是否输入过电子邮件与否。)对于我的示例(用户存在),我提供了一些链接来帮助您检查用户是否已经在您的数据库中。
如何检查firebase数据库中是否存在值 - android
只需搜索并查找您的用户是否已经在您的数据库中。在任何操作之前检查这个 ifs。如果他不是,您将允许他继续。
推荐阅读
- javascript - 如何在 OpenCV.js 中获取轮廓角点的坐标?
- flutter - 颤振类型'列表
>' 不是类型“列表”的子类型 ' - java - 使用邮递员将 Json 发送到 springboot
- html - 哪个更适合验证电子邮件标签、正则表达式和输入类型?
- android - 登录系统的人脸识别/匹配
- javascript - React路由器如何在同一页面上单击显示每个组件
- regex - 如何让字符串以包含子字符串的内容开始和结束?
- android - Netinfo.isConnected 在 Android 中总是返回 true
- javascript - 自调用命名函数在javascript中变得未定义
- pandas - 删除稀疏组的最快方法?