NullPointerException при попытке получить данные из базы данных Firebase Realtime - PullRequest
1 голос
/ 17 апреля 2020

Структура базы данных enter image description here

Я пытаюсь получить ссылку на пользователей из списка чата. То, что я пытаюсь сделать, - если пользователь вошел в систему, то увидит, что упомянутые пользователи находятся под узлом 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)

Мой код

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;
}

Обновление

Список чата. 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;
    }


}

Пользователь. 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 Ответ

2 голосов
/ 17 апреля 2020

начать прослушивание узла 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) {
.....
....
....
}
....
....

update

Убедитесь, что эта строка удалена:

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;
}

}

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...