-1

I got to know i havent initiated the textlayout usr=findViewById(R.id.username); pass=findViewById(R.id.usrPass); but now i have added them and got error again. I am able to check if user exits or not but unable to verify the pass.As i click sign in with wrong pass the app crash as well as with the wright passs it crash.

JAVA

public class login extends AppCompatActivity {

TextInputLayout usr,pass;
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_login);
    getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,WindowManager.LayoutParams.FLAG_FULLSCREEN);
    usr=findViewById(R.id.username);
    pass=findViewById(R.id.usrPass);
}
  public void loginUser(View view)
{
    if(!validateusrName()|!validatepass())
    {return;}
    else {
        isUser();
    }
}

private void isUser(){
    final String userEnteredusrname = usr.getEditText().getText().toString().trim();
    final String userEnteredpass = pass.getEditText().getText().toString().trim();

    DatabaseReference reference= FirebaseDatabase.getInstance().getReference("users");
    Query checkUser = reference.orderByChild("usrname").equalTo(userEnteredusrname);
    checkUser.addListenerForSingleValueEvent(new ValueEventListener() {
        @Override
        public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
            if(dataSnapshot.exists()){
                usr.setError(null);
                usr.setErrorEnabled(false);
                String passfrmdb=dataSnapshot.child(userEnteredusrname).child("pass").getValue(String.class);
                if(passfrmdb.equals(userEnteredpass)){
                    usr.setError(null);
                    usr.setErrorEnabled(false);
                    String dbcllg=dataSnapshot.child(userEnteredusrname).child("cllg").getValue(String.class);
                    String dbemail=dataSnapshot.child(userEnteredusrname).child("email").getValue(String.class);
                    String dbname=dataSnapshot.child(userEnteredusrname).child("name").getValue(String.class);
                    String dbphno=dataSnapshot.child(userEnteredusrname).child("phno").getValue(String.class);
                    String dbusrname=dataSnapshot.child(userEnteredusrname).child("usrname").getValue(String.class);

                    Intent intent = new Intent(getApplicationContext(),MainActivity.class);
                    intent.putExtra("name",dbname);
                    intent.putExtra("usrname",dbusrname);
                    intent.putExtra("email",dbemail);
                    intent.putExtra("phno",dbphno);
                    intent.putExtra("cllg",dbcllg);

                    startActivity(intent);
                }
                else{
                    pass.setError("Wrong Password");
                    pass.requestFocus();
                }
            }

            else {
                usr.setError("NO SUCH USER FOUND");
                usr.requestFocus();
            }
        }


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

        }
    });


}
}

LOG

2020-04-20 01:36:27.776 11545-11545/com.studenthelper.bscithelp E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.studenthelper.bscithelp, PID: 11545
java.lang.NullPointerException: Attempt to invoke virtual method 'boolean java.lang.String.equals(java.lang.Object)' on a null object reference
    at com.studenthelper.bscithelp.login$1.onDataChange(login.java:82)
    at com.google.firebase.database.Query$1.onDataChange(com.google.firebase:firebase-database@@19.2.1:179)
    at com.google.firebase.database.core.ValueEventRegistration.fireEvent(com.google.firebase:firebase-database@@19.2.1:75)
    at com.google.firebase.database.core.view.DataEvent.fire(com.google.firebase:firebase-database@@19.2.1:63)
    at com.google.firebase.database.core.view.EventRaiser$1.run(com.google.firebase:firebase-database@@19.2.1:55)
    at android.os.Handler.handleCallback(Handler.java:873)
    at android.os.Handler.dispatchMessage(Handler.java:99)
    at android.os.Looper.loop(Looper.java:193)
    at android.app.ActivityThread.main(ActivityThread.java:6692)
    at java.lang.reflect.Method.invoke(Native Method)
    at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:493)
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:858)
Frank van Puffelen
  • 565,676
  • 79
  • 828
  • 807
abhishek
  • 115
  • 1
  • 1
  • 7

2 Answers2

1

You got:

java.lang.NullPointerException: Attempt to invoke virtual method 'boolean java.lang.String.equals(java.lang.Object)' on a null object reference
        at com.studenthelper.bscithelp.login$1.onDataChange(login.java:82)

You got a NullPointerException while trying to compare two strings using .equals() method within onDataChange() in line 82.

Typically in if(passfrmdb.equals(userEnteredpass)){ condition. where your passfrmdb is null.

So, the passfrmdb gets a null value by below expression:

String passfrmdb = dataSnapshot.child(userEnteredusrname).child("pass").getValue(String.class);

So, you need to check if this child "pass" already exist, and also the userEnteredusrname node already there. Here you need to start debugging

Zain
  • 37,492
  • 7
  • 60
  • 84
0

You are getting null value for passfrmdb and you use it here as,

if(passfrmdb.equals(userEnteredpass))

You can not call equals() on null string.

Check your query for fetching password from DB, it it is correct or not.

Nilesh B
  • 937
  • 1
  • 9
  • 14