Android 如何只将用户数据写入firebase数据库一次?

Android 如何只将用户数据写入firebase数据库一次?,android,firebase,firebase-realtime-database,Android,Firebase,Firebase Realtime Database,我只想在用户首次登录时将其数据写入数据库。我不希望它被一遍又一遍地写。我为此编写了一个方法,但我遇到了一个问题,因为for循环中有多个值。我怎样才能解决这个问题 public void writeFirebase() { final Users users = new Users(); final List<String> arrayList = new ArrayList<>(); myRef.child("Users").addValueEv

我只想在用户首次登录时将其数据写入数据库。我不希望它被一遍又一遍地写。我为此编写了一个方法,但我遇到了一个问题,因为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) {
        }
    });
}
public void writeFileBase(){
最终用户=新用户();
最终列表arrayList=新的arrayList();
myRef.child(“用户”).addValueEventListener(新的ValueEventListener(){
@凌驾
public void onDataChange(@NonNull DataSnapshot DataSnapshot){
对于(DataSnapshot ds:DataSnapshot.getChildren()){
add(ds.getKey());
}
如果(arrayList.size()>0){
for(字符串cur:arrayList){
if(cur.matches(mUser.getUid())){
}否则{
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(“免费”);
users.setUserEmail(mUser.getEmail());
myRef.child(“用户”).child(mUser.getUid()).setValue(用户);
}
}
}否则{
users.setUserId(mUser.getUid());
users.setUserPremium(false);
users.setUserEmail(mUser.getEmail());
users.setUserName(mUser.getDisplayName());
users.setUserProfilPic(mUser.getPhotoUrl().toString());
users.setUserPremiumDate(“免费”);
myRef.child(“用户”).child(mUser.getUid()).setValue(用户);
}
}
@凌驾
已取消的公共void(@NonNull DatabaseError DatabaseError){
}
});
}

如果您想在数据库中一次性写入用户数据并防止再次写入,只需检查该用户是否已在数据库中。(在这个答案中,我认为你关心的是你的用户的存在,它可以是任何其他的,例如,也许你不想让用户更新他的电子邮件地址,如果他已经输入一次。所以你只要检查一下,如果用户已经输入电子邮件之前或没有。) 对于我的示例(用户存在),我提供了一些链接,帮助您检查用户是否已经在数据库中


只需搜索并查找您的用户是否已在数据库中。在进行任何操作之前,请检查此ifs。如果他不是,你会允许他继续。

你能解释更多吗。您的意思是因为用户有多个字段要填写,所以可能需要频繁更新数据库以使其完整(每次用户只填写部分字段)?只更新用户类的2个数据。其他数据只写入1次。当然,此代码中的所有数据都是在调用活动时写入的。但我不想这样。我的目标是,如果用户数据被写入数据库1次,就永远不要再写入。你是说每个用户都可以创建一次,永远不要再创建一次吗?如果是这样的话,为什么你不检查用户名的存在性当然这正是我只想写一次的原因你不知道exist()方法:)这就是我解决问题的方法。我很高兴它帮助了你:)