Java 我的Firebase数据库为每个成员属性返回null
我创建了一个Firebase数据库来存储成员,就像联系人一样,我正在尝试获取数据库中存储的所有成员属性。现在,成员列表正在正确获取,但成员详细信息(如Java 我的Firebase数据库为每个成员属性返回null,java,android,firebase,firebase-realtime-database,Java,Android,Firebase,Firebase Realtime Database,我创建了一个Firebase数据库来存储成员,就像联系人一样,我正在尝试获取数据库中存储的所有成员属性。现在,成员列表正在正确获取,但成员详细信息(如电话,电子邮件等)返回空。请帮帮我 这是Firebase数据库结构: 这是我获取成员列表的代码: members = new ArrayList<>(); member = new Member(); adapter = new AllMembersAdapter(members, this); databa
电话
,电子邮件
等)返回空
。请帮帮我
这是Firebase数据库结构:
这是我获取成员列表的代码:
members = new ArrayList<>();
member = new Member();
adapter = new AllMembersAdapter(members, this);
database = FirebaseDatabase.getInstance();
databaseReference = database.getReference().child("Rad5 Tech Hub");
databaseReference.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
members.clear();
for (DataSnapshot ds : dataSnapshot.getChildren()){
member = ds.getValue(Member.class);
Log.d("debugger", "member email: " + member.getEmail()); //returns null
members.add(member);
}
recyclerViewList.setAdapter(adapter);
}
@Override
public void onCancelled(@NonNull DatabaseError databaseError) {
}
});
members=newarraylist();
成员=新成员();
适配器=新的AllMembersAdapter(成员,此);
database=FirebaseDatabase.getInstance();
databaseReference=database.getReference().child(“Rad5技术中心”);
databaseReference.addValueEventListener(新的ValueEventListener(){
@凌驾
public void onDataChange(@NonNull DataSnapshot DataSnapshot){
成员。清除();
对于(DataSnapshot ds:DataSnapshot.getChildren()){
member=ds.getValue(member.class);
Log.d(“调试器”,“成员电子邮件:+member.getEmail());//返回null
成员。添加(成员);
}
RecycleServiceWList.setAdapter(适配器);
}
@凌驾
已取消的公共void(@NonNull DatabaseError DatabaseError){
}
});
这是我的会员班
public class Member {
private String mMonthName;
private String mLastName;
private String mGender;
private String mEmail;
private String mPhone;
private String mAddress;
private String mDate;
private String mOccupation;
public Member(){}
public Member(String mAddress, String mDate, String mEmail, String mGender,
String mLastName, String mMonthName, String mOccupation, String mPhone) {
this.mLastName = mLastName;
this.mGender = mGender;
this.mEmail = mEmail;
this.mPhone = mPhone;
this.mAddress = mAddress;
this.mDate = mDate;
this.mOccupation = mOccupation;
this.mMonthName = mMonthName;
}
public String getLastName() {
return mLastName;
}
public String getGender() {
return mGender;
}
public String getEmail() {
return mEmail;
}
public String getPhone() {
return mPhone;
}
public String getAddress() {
return mAddress;
}
public String getDate() {
return mDate;
}
public String getMonthName() {
return mMonthName;
}
public String getOccupation() {
return mOccupation;
}
public Map<String, Object> toMap(){
HashMap<String, Object> result = new HashMap<>();
result.put("address", mAddress);
result.put("birthday", mDate);
result.put("email", mEmail);
result.put("gender", mGender);
result.put("last name", mLastName);
result.put("month name", mMonthName);
result.put("occupation", mOccupation);
result.put("phone number", mPhone);
return result;
}
公共类成员{
私有字符串名称;
私有字符串mLastName;
私有字符串管理器;
私有字符串mEmail;
专用字符串mPhone;
私服;
私有字符串mDate;
私家侦探;
公共成员(){}
公共成员(字符串mAddress、字符串mDate、字符串mEmail、字符串mGender、,
字符串mLastName、字符串AMNOTHNAME、字符串MOCUPATION、字符串mPhone){
this.mLastName=mLastName;
this.mGender=mGender;
this.mEmail=mEmail;
this.mPhone=mPhone;
this.mAddress=mAddress;
this.mDate=mDate;
this.mOccupation=mOccupation;
this.mMonthName=mMonthName;
}
公共字符串getLastName(){
返回mLastName;
}
公共字符串getGender(){
返料机;
}
公共字符串getEmail(){
返回mEmail;
}
公共字符串getPhone(){
返回mPhone;
}
公共字符串getAddress(){
回归疯狂;
}
公共字符串getDate(){
返回mDate;
}
公共字符串getMonthName(){
返回名称;
}
公共字符串getOccupation(){
回归分析;
}
公共地图toMap(){
HashMap结果=新建HashMap();
结果。放入(“地址”,mAddress);
结果。放置(“生日”,mDate);
结果。输入(“电子邮件”,mEmail);
结果。put(“性别”,mGender);
结果。输入(“姓氏”,mLastName);
结果.输入(“月名”,月名);
结果。放置(“职业”,移动);
结果。输入(“电话号码”,mPhone);
返回结果;
}
}
以下是我的适配器类:
public class AllMembersAdapter extends RecyclerView.Adapter<AllMembersAdapter.MembersViewHolder> {
ArrayList<Member> members;
ListItemClickListener listItemClickListener;
public AllMembersAdapter(ArrayList<Member> members, ListItemClickListener listItemClickListener) {
this.members = members;
this.listItemClickListener = listItemClickListener;
}
@NonNull
@Override
public MembersViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
Context context = parent.getContext();
LayoutInflater inflater = LayoutInflater.from(context);
View view = inflater.inflate(R.layout.member_item, parent, false);
return new MembersViewHolder(view);
}
@Override
public void onBindViewHolder(@NonNull MembersViewHolder holder, int position) {
Member member = members.get(position);
String _monthName = member.getMonthName();
holder.mMonth.setText(_monthName);
holder.mName.setText(member.getLastName());
holder.mDate.setText(member.getDate());
}
@Override
public int getItemCount() {
return members.size();
}
public interface ListItemClickListener{
void onListItemClick(int position);
}
public class MembersViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener{
TextView mMonth;
TextView mName;
TextView mDate;
public MembersViewHolder(View itemView) {
super(itemView);
mMonth = (TextView) itemView.findViewById(R.id.txt_month);
mName = (TextView) itemView.findViewById(R.id.txt_name);
mDate = (TextView) itemView.findViewById(R.id.txt_date);
itemView.setOnClickListener(this);
}
@Override
public void onClick(View v) {
listItemClickListener.onListItemClick(getAdapterPosition());
}
}
public类AllMembersAdapter扩展了RecyclerView.Adapter{
ArrayList成员;
ListItemClickListener ListItemClickListener;
public AllMembersAdapter(ArrayList成员,ListItemClickListener ListItemClickListener){
这个.成员=成员;
this.listItemClickListener=listItemClickListener;
}
@非空
@凌驾
public MembersViewHolder onCreateViewHolder(@NonNull ViewGroup父级,int viewType){
Context=parent.getContext();
LayoutFlater充气机=LayoutFlater.from(上下文);
视图=充气机。充气(R.layout.member\u项,父项,false);
返回新成员查看文件夹(视图);
}
@凌驾
public void onBindViewHolder(@NonNull MembersViewHolder,int位置){
Member=members.get(位置);
字符串_monthName=member.getMonthName();
holder.month.setText(_monthName);
holder.mName.setText(member.getLastName());
holder.mDate.setText(member.getDate());
}
@凌驾
public int getItemCount(){
返回成员。size();
}
公共接口ListItemClickListener{
void onListItemClick(内部位置);
}
公共类MembersViewHolder扩展了RecyclerView.ViewHolder实现了View.OnClickListener{
文本视图;
文本视图mName;
文本视图mDate;
公共成员查看文件夹(查看项目视图){
超级(项目视图);
mMonth=(TextView)itemView.findViewById(R.id.txt\u月);
mName=(TextView)itemView.findViewById(R.id.txt\u name);
mDate=(TextView)itemView.findViewById(R.id.txt\u日期);
setOnClickListener(这个);
}
@凌驾
公共void onClick(视图v){
listItemClickListener.onListItemClick(getAdapterPosition());
}
}
}正如@TheTechWolf在他的评论中提到的,问题在于
成员
类字段与Firebase数据库中的字段名称不同。让我们举一个例子,在模型类中有一个名为monthname
的字段,但在数据库中相应的字段名为month name
。当您使用名为getMonthName()
的getter时,Firebase正在查看名为monthName
的字段,而不是您现在看到的monthName
。因此,要解决此问题,请使用以下模型类,其中包含您需要的所有成员字段:
public class Member {
private String monthName, lastName, gender, email, phone, address, date, occupation;
public Member() {}
public Member(String monthName, String lastName, String gender, String email, String phone, String address, String date, String occupation) {
this.monthName = monthName;
this.lastName = lastName;
this.gender = gender;
this.email = email;
this.phone = phone;
this.address = address;
this.date = date;
this.occupation = occupation;
}
public String getMonthName() { return monthName; }
public String getLastName() { return lastName; }
public String getGender() { return gender; }
public String getEmail() { return email; }
public String getPhone() { return phone; }
public String getAddress() { return address; }
public String getDate() { return date; }
public String getOccupation() { return occupation; }
}
正如@TheTechWolf在他的评论中提到的,问题在于
成员
类字段与Firebase数据库中的字段名称不同。让我们举一个例子,在模型类中有一个名为monthname
的字段,但在数据库中相应的字段名为month name
。当您使用名为getMonthName()
的getter时,Firebase正在查看名为monthName
的字段,而不是您现在看到的monthName
。因此,要解决此问题,请使用以下模型类,其中包含您需要的所有成员字段:
public class Member {
private String monthName, lastName, gender, email, phone, address, date, occupation;
public Member() {}
public Member(String monthName, String lastName, String gender, String email, String phone, String address, String date, String occupation) {
this.monthName = monthName;
this.lastName = lastName;
this.gender = gender;
this.email = email;
this.phone = phone;
this.address = address;
this.date = date;
this.occupation = occupation;
}
public String getMonthName() { return monthName; }
public String getLastName() { return lastName; }
public String getGender() { return gender; }
public String getEmail() { return email; }
public String getPhone() { return phone; }
public String getAddress() { return address; }
public String getDate() { return date; }
public String getOccupation() { return occupation; }
}
成员类字段应与要检索的firebase字段具有相同的名称。因此,与其将参数命名为mEmail
,不如将其命名为email