尝试从Firebase实时数据库接收数据时发生NullPointerException

时间:2020-04-17 09:36:06

标签: android firebase firebase-realtime-database

数据库结构 enter image description here

我正在尝试从聊天列表中获取对用户的引用。我要尝试执行的操作是,如果用户登录,他将在他的recyclerview内看到“聊天列表中的Uid”下提到的用户。

我在下一行中得到一个nullpointerexception

   DatabaseReference UserRef = rootRef.child("Users").child(chatlist.getId());

例外

 java.lang.NullPointerException: Can't pass null for argument 'pathString' in child()
    at com.google.firebase.database.DatabaseReference.child(com.google.firebase:firebase-database@@19.2.1:96)
    at com.shivam.chatapp2.Fragments.Chats.onCreateView(Chats.java:112)

MyCode

public class Chats extends Fragment {

private RecyclerView recyclerView;

private UserAdapter userAdapter;
private List<User> mUsers;

FirebaseUser fuser;
DatabaseReference reference;



FloatingActionButton profile, credentials;

ValueEventListener ChatListListener;
List<Chatlist> usersList;

private ChatsFragmentAdapter chatsFragmentAdapter;


public Chats() {
    // Required empty public constructor
}


@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
                         Bundle savedInstanceState) {
    // Inflate the layout for this fragment
    View view = inflater.inflate(R.layout.fragment_chats, container, false);

    profile = view.findViewById(R.id.fab_edit_profile_pic);
    credentials = view.findViewById(R.id.fab_edit_name);
    FabAction();

    recyclerView = view.findViewById(R.id.recycler_view);
    recyclerView.setHasFixedSize(true);
    recyclerView.setLayoutManager(new LinearLayoutManager(getContext()));



    fuser = FirebaseAuth.getInstance().getCurrentUser();

    usersList = new ArrayList<>();

    reference = FirebaseDatabase.getInstance().getReference("Chatlist").child(fuser.getUid());
    reference.addValueEventListener(new ValueEventListener() {
        @Override
        public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
            usersList.clear();
            if(dataSnapshot.exists()) {
                for (DataSnapshot snapshot : dataSnapshot.getChildren()) {
                    Chatlist chatlist = snapshot.getValue(Chatlist.class);
                    usersList.add(chatlist);
                }
            }

            //chatList();
        }

        @Override
        public void onCancelled(@NonNull DatabaseError databaseError) {

        }
    });


    Chatlist chatlist=new Chatlist();

    DatabaseReference rootRef = FirebaseDatabase.getInstance().getReference();
    DatabaseReference UserRef = rootRef.child("Users").child(chatlist.getId());
    UserRef.addListenerForSingleValueEvent(new ValueEventListener() {
        @Override
        public void onDataChange(@NonNull DataSnapshot dataSnapshot) {

            for (DataSnapshot snapshot: dataSnapshot.getChildren()) {

                User user = snapshot.getValue(User.class);

                mUsers.add(user);

            }

            userAdapter = new UserAdapter(getContext(), mUsers, true);
            recyclerView.setAdapter(userAdapter);

        }

        @Override
        public void onCancelled(@NonNull DatabaseError databaseError) {

        }
    });



    return view;
}

更新

Chatlist.java

    public class Chatlist {
    public String id;
    public String MessageCheck;

    public Chatlist() {
    }

    public Chatlist(String id) {
        this.id = id;

    }

    public String getId() {
        return id;
    }

    public void setId(String id) {
        this.id = id;
    }


}

User.java

    public class User {

    private String id;
    private String First;
    private String EmailID;
    private String imageURL;
    private String status;

    public User(String id, String first, String emailID, String imageURL,String status) {
        this.id = id;
        this.First = first;
        this.EmailID = emailID;
        this.imageURL = imageURL;
        this.status=status;


    }

    public User() {
    }

    public User(String userid, String first_name, String eMail) {

    }

    public String getId() {
        return id;
    }

    public void setId(String id) {
        this.id = id;
    }

    public String getFirst() {
        return First;
    }

    public void setFirst(String first) {
        First = first;
    }

    public String getImageURL() {
        return imageURL;
    }

    public void setImageURL(String imageURL) {
        this.imageURL = imageURL;
    }

    public String getEmailID() {
        return EmailID;
    }

    public void setEmailID(String emailID) {
        EmailID = emailID;
    }

    public String getStatus() {
        return status;
    }

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

}

1 个答案:

答案 0 :(得分:2)

从您对users节点的第一个查询开始收听chatlist节点:

reference = FirebaseDatabase.getInstance().getReference("Chatlist").child(fuser.getUid());

reference.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
usersList.clear();
if(dataSnapshot.exists()) {
for (DataSnapshot snapshot : dataSnapshot.getChildren()) {
Chatlist chatlist = snapshot.getValue(Chatlist.class);
usersList.add(chatlist);

//start listening to users node here
DatabaseReference rootRef = FirebaseDatabase.getInstance().getReference();
DatabaseReference UserRef = rootRef.child("Users").child(chatlist.getId());
UserRef.addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
.....
....
....
}
....
....

更新

确保已删除此行:

Chatlist chatlist=new Chatlist();

更新2

请勿在用户查询中执行此操作:

for (DataSnapshot snapshot: dataSnapshot.getChildren()) {

User user = snapshot.getValue(User.class);

mUsers.add(user);

}

代替执行此操作:

User user = dataSnapshot.getValue(User.class);
mUsers.add(user);

更新3

聊天列表类:

public class Chatlist {
public String id;


public Chatlist(String id) {
this.id = id;
}

public Chatlist(String id) {
    this.id = id;

}

public String getId() {
    return id;
}

public void setId(String id) {
    this.id = id;
}


}

用户类别:

public class User {

private String id;
private String First;
private String EmailId;
private String imageURL;
private String status;

public User(String id, String First, String EmailId, String imageURL,String status) {
    this.id = id;
    this.First = First;
    this.EmailId = EmailId;
    this.imageURL = imageURL;
    this.status=status;


}

public User() {
}

public User(String userid, String first_name, String eMail) {

}

public String getId() {
    return id;
}

public void setId(String id) {
    this.id = id;
}

public String getFirst() {
    return First;
}

public void setFirst(String first) {
    this.First = first;
}

public String getImageURL() {
    return imageURL;
}

public void setImageURL(String imageURL) {
    this.imageURL = imageURL;
}

public String getEmailID() {
    return EmailId;
}

public void setEmailID(String emailID) {
    this.EmailId = emailID;
}

public String getStatus() {
    return status;
}

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

}