首页 > 解决方案 > Android Firebase 获取所有用户信息问题

问题描述

我想列出注册到系统的用户。

主页:

    List<User> users;
    databaseReference = FirebaseDatabase.getInstance().getReference("Users");

    databaseReference.addValueEventListener(new ValueEventListener() {
        @Override
        public void onDataChange(DataSnapshot dataSnapshot) {
            if(dataSnapshot.exists())
            {
                for(DataSnapshot postSnapShot:dataSnapshot.getChildren())
                {
                    User user = postSnapShot.getValue(User.class);
                    users.add(user);
                    customAdapter.notifyDataSetChanged();

                }
            }

        }
        @Override
        public void onCancelled(DatabaseError databaseError) {
            Log.e("selam", "onCancelled: " + databaseError );
        }
    });

用户 Java 类

public class User {


private String email ="";
private String nickname="";
private String status="";
private String uid="";


public String getEmail() {
    return email;
}

public void setEmail(String email) {
    this.email = email;
}

public String getNickname() {
    return nickname;
}

public void setNickname(String nickname) {
    this.nickname = nickname;
}

public String getStatus() {
    return status;
}

public void setStatus(String status) {
    this.status = status;
}

public String getUid() {
    return uid;
}

public void setUid(String uid) {
    this.uid = uid;
}

图片

标签: javaandroidfirebase

解决方案


你得到它是NullPointerException因为你还没有初始化你的users列表。要解决此问题,请使用以下代码:

databaseReference.addValueEventListener(new ValueEventListener() {
    @Override
    public void onDataChange(DataSnapshot dataSnapshot) {
        if(dataSnapshot.exists())
        {
            List<User> users = new ArrayList<>(); //Initialize the list
            for(DataSnapshot postSnapShot : dataSnapshot.getChildren())
            {
                User user = postSnapShot.child("userInfo").getValue(User.class);
                users.add(user);

            }
            customAdapter.notifyDataSetChanged();
        }

    }
    @Override
    public void onCancelled(DatabaseError databaseError) {
        Log.e("selam", "onCancelled: " + databaseError );
    }
});

另请注意,我customAdapter.notifyDataSetChanged();在 for 循环之外移动了 ,并且我还添加了.child("userInfo")call 因为您的数据库树中有一个额外的级别。


推荐阅读