首页 > 解决方案 > 如何只将用户数据写入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) {
        }
    });
}

标签: androidfirebasefirebase-realtime-database

解决方案


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

如何搜索给定的firebase数据库中是否存在用户名?

如何搜索给定的firebase数据库中是否存在用户名?

如何检查firebase数据库中是否存在值 - android

只需搜索并查找您的用户是否已经在您的数据库中。在任何操作之前检查这个 ifs。如果他不是,您将允许他继续。


推荐阅读