如何仅将用户数据写入Firebase数据库一次?

时间:2018-12-30 18:52:12

标签: android firebase firebase-realtime-database

我只想在用户首次登录时才将其数据写入数据库。我不想一遍又一遍地写它。我为此编写了一个方法,但是有一个问题,因为在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) {
        }
    });
}

1 个答案:

答案 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。如果他不是,您将允许他继续。