Firebase Android错误用户显示

时间:2018-05-08 18:26:27

标签: java android firebase firebase-realtime-database

它显示了某些内容,但是来自错误的用户,而不是已登录的用户。事实上,它是最新的注册用户。有什么建议?这是我的代码:

    FirebaseDatabase database = FirebaseDatabase.getInstance();
    DatabaseReference ref = database.getInstance().getReference("userInfos");

    ref.addChildEventListener(new ChildEventListener() {
        @Override
        public void onChildAdded(DataSnapshot dataSnapshot, String s) {

            UserInformation userInformation = dataSnapshot.getValue(UserInformation.class);
            vorname.setText(userInformation.vorname);
            nachname.setText(userInformation.nachname);
            alter.setText(userInformation.alter);
            sprachen.setText(userInformation.sprachen);
            System.out.println("Prev: " + s);
        }

Structure of my database

2 个答案:

答案 0 :(得分:1)

嗯,您正在使用的侦听器类型是添加新用户时将触发的ChildAdded(这就是您获取最后添加的用户的原因)要获取当前用户数据用户,请使用值事件侦听器并传递记录的用户ID:

 String UID = FirebaseAuth.getInstance().getCurrentUser().getUid();
 DatabaseReference ref = database.getInstance().getReference("userInfos");

        ref.child(UID).addValueEventListener(new ValueEventListener() {
      @Override
      public void onDataChange(DataSnapshot snapshot) {
         UserInformation userInformation = dataSnapshot.getValue(UserInformation.class);
            vorname.setText(userInformation.vorname);
            nachname.setText(userInformation.nachname);
            alter.setText(userInformation.alter);
            sprachen.setText(userInformation.sprachen);
      }
      @Override
      public void onCancelled(DatabaseError databaseError) {        
      }
    });

答案 1 :(得分:1)

当您使用以下代码行时:

System.out.println("Prev: " + s);

s变量包含String类型的值,该值实际上来自重写方法onChildAdded()的第二个参数。根据{{​​3}},第二个参数也可以写成:

onChildAdded(DataSnapshot snapshot, String previousChildName)

这就是你打印错误名字的原因。所以第二个参数实际上是前一个孩子的名字。