0

I have a problem with retrieving data from firebase realtime database. It keeps giving me an error saying "java.lang.NullPointerException: Attempt to invoke virtual method 'boolean java.lang.String.equals(java.lang.Object)' on a null object reference"

So this method is used to retrieve data from firebase database and log users in with their username and password.

I have tried if(Accounts.getPassword() != null && password.getText() != null && Accounts.getPassword().equals(password.getText().toString())) but no luck it still gives me the error.

private void isUser() {
    final String userEnteredUsername = username.getText().toString().trim();
    final String userEnteredPassword = password.getText().toString().trim();

    DatabaseReference reff = FirebaseDatabase.getInstance().getReference("login");

    Query checkUser = reff.orderByChild("username").equalTo(userEnteredUsername);

    checkUser.addListenerForSingleValueEvent(new ValueEventListener() {
        @Override
        public void onDataChange(@NonNull DataSnapshot dataSnapshot) {



            if (dataSnapshot.exists()){

                String passwordFromDB = dataSnapshot.child(userEnteredUsername).child("password").getValue(String.class);
                Accounts accounts = dataSnapshot.getValue(Accounts.class);


                if (passwordFromDB.equals(userEnteredPassword){ // ****Line that code is not working****

                    String usernameFromDB = dataSnapshot.child(userEnteredUsername).child("username").getValue(String.class);
                    String accountFromDB = dataSnapshot.child(userEnteredUsername).child("account").getValue(String.class);


                    Intent intent = new Intent(getApplicationContext(), Driver.class);

                    intent.putExtra("username", usernameFromDB);
                    intent.putExtra("password", passwordFromDB);
                    intent.putExtra("account", accountFromDB);

                    startActivity(intent);
                }
                else {
                    password.setError("Wrong Password");
                    password.requestFocus();
                }
            }
            else {
                username.setError("Wrong username");
                username.requestFocus();
            }
        }
        @Override
        public void onCancelled(@NonNull DatabaseError error) {

        }
    });
    }
Jay
  • 1

1 Answers1

0

you can check your snapshosts like this:

List < String > userIdList;
if (dataSnapshot.exists()) {
  for (DataSnapshot ignored: dataSnapshot.getChildren()) {
    userIdList.add(ignored.getKey());
  }
  for (int i = 0; i < userIdList.size(); i++) {
    String db = dataSnapshot.child(userIdList.get(i)).getValue(String.class);
  }

}
Halil Sahin
  • 568
  • 1
  • 6
  • 25
  • Thanks for the suggestion! But I know that my username snapshot isn't null, it's just retrieving the password matching the username input from the user to login is what's causing me trouble. – Jay Nov 29 '20 at 02:57
  • Then create an entity like it name is User.java . Put username and password inside in and of coursea constructor. Then change the lines like this: User db = dataSnapshot.child(userIdList.get(i)).getValue(User.class); It will fill your password field automatically. – Halil Sahin Nov 29 '20 at 03:01