我正在尝试从聊天列表中获取对用户的引用。我要尝试执行的操作是,如果用户登录,他将在他的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;
}
}
答案 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;
}
}