添加默认值firebase

时间:2017-05-13 12:49:06

标签: android firebase-realtime-database firebase-authentication

我在我的android项目中使用Firebase-UI和电子邮件/密码提供程序。数据库的结构是:

profiles
    user-id
         age
         height
    user-id

在注册时,我想在配置文件中输入具有默认值的新节点。用户可以稍后编辑和保存值。对于现有用户,我只想读取值并在UI中显示它们。我已经尝试使用ChildEventListener和dataSnapshot.hasChild(uid)来检测用户是否已经存在但是它不起作用。这是AuthStateListener:

mAuthStateListener = new FirebaseAuth.AuthStateListener() {
        @Override
        public void onAuthStateChanged(@NonNull FirebaseAuth firebaseAuth) {
            FirebaseUser user = mFirebaseAuth.getCurrentUser();
            if(user != null)
            {
                onSignedInInitialize(user);
            }
            else
            {
                onSignedOutCleanup();
                startActivityForResult(AuthUI.getInstance().createSignInIntentBuilder().setProviders(providers).build(), SIGN_IN);
            }
        }
    };

这就是我的尝试:

private void onSignedInInitialize(final FirebaseUser user) {
    userRef = mProfilesDBReference.child(user.getUid());

    if(mValueEventListener == null)
    {
        mValueEventListener = new ValueEventListener() {
            @Override
            public void onDataChange(DataSnapshot dataSnapshot) {
                if(dataSnapshot.getValue() == null)
                {
                    UserProfile profile = new UserProfile("username", null, 100, 100);
                    userRef.setValue(profile);
                    UpdateUI(profile);
                }
                else
                {
                    UserProfile profile = dataSnapshot.getValue(UserProfile.class);
                    UpdateUI(profile);
                }


            }

            @Override
            public void onCancelled(DatabaseError databaseError) {

            }
        };
    }

    userRef.addValueEventListener(mValueEventListener);
  }

1 个答案:

答案 0 :(得分:1)

让我们说用户ID存储在uid; 你可以像这样获取身高和年龄。

DatabasReference userRef = database.getReference("profiles").child(uid);
userRef.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
   if(dataSnapshot.getValue() == null){
      //User data doesnt exist
   }
  else
   {
    HashMap<String,String> userMap = 
      (HashMap<String,String>)dataSnapshot.getValue();
     String age = userMap.get("age");
    String height = userMap.get("height");
   }
}

@Override
public void onCancelled(DatabaseError databaseError) {

}
 });

请注意,我假设您已将它们存储为字符串,firebase通常将int转换为long。因此,如果您使用了int,请将hashmap的值类型转换为Long。 更好的方法是创建一个POJO类。