首页 > 解决方案 > 尝试在空对象引用上调用虚拟方法“boolean java.lang.String.equals(java.lang.Object)”以读取登录页面的数据

问题描述

我的代码有问题,从数据库调用有问题。

private void isUser() {
    final String userEnteredUsername=regUsername.getEditText().getText().toString().trim();
    final String userEnteredPassword=regPassword.getEditText().getText().toString().trim();

    DatabaseReference reference=FirebaseDatabase.getInstance().getReference("users");
    Query checkUser=reference.orderByChild("username").equalTo(userEnteredUsername);
    checkUser.addListenerForSingleValueEvent(new ValueEventListener() {
        @Override
        public void onDataChange(@NonNull DataSnapshot snapshot) {
            if(snapshot.exists()){

                regUsername.setError(null);
                regUsername.setErrorEnabled(false);

                String passwordFromDb=snapshot.child(userEnteredUsername).child("password").getValue(String.class);

                if(passwordFromDb.equals(userEnteredPassword)){

                    regPassword.setError(null);
                    regPassword.setErrorEnabled(false);

                    String nameFromDb=snapshot.child(userEnteredUsername).child("name").getValue(String.class);
                    String usernameFromDb=snapshot.child(userEnteredUsername).child("username").getValue(String.class);
                    String phoneNoFromDb=snapshot.child(userEnteredUsername).child("phoneNo").getValue(String.class);
                    String emailFromDb=snapshot.child(userEnteredUsername).child("email").getValue(String.class);

                    Intent intent = new Intent(getApplicationContext(),MainActivity.class);
                    Toast.makeText(getApplicationContext(),"Welcome",Toast.LENGTH_SHORT).show();

                    intent.putExtra("name",nameFromDb);
                    intent.putExtra("username",usernameFromDb);
                    intent.putExtra("email",emailFromDb);
                    intent.putExtra("phoneNo",phoneNoFromDb);
                    intent.putExtra("password",passwordFromDb);
                    startActivity(intent);
                }
                else {
                    regPassword.setError("Wrong Password");
                    regPassword.requestFocus();
                }
            }
            else{
                regUsername.setError("No such User Exist");
                regUsername.requestFocus();
            }
        }

        @Override
        public void onCancelled(@NonNull DatabaseError error) {}
    });
}

2020-10-08 11:12:44.273 14309-14309/com.example.auditapp E/AndroidRuntime:致命异常:主进程:com.example.auditapp,PID:14309 java.lang.NullPointerException:尝试调用虚拟方法' boolean java.lang.String.equals(java.lang.Object)' 在 com.google.firebase.database.Query$1 的 com.example.auditapp.SignIn$3.onDataChange(SignIn.java:96) 的空对象引用上.onDataChange(Query.java:179) 在 com.google.firebase.database.core.ValueEventRegistration.fireEvent(ValueEventRegistration.java:75) 在 com.google.firebase.database.core.view.DataEvent.fire(DataEvent.java :63) 在 com.google.firebase.database.core.view.EventRaiser$1.run(EventRaiser.java:55) 在 android.os.Handler.handleCallback(Handler.java:883) 在 android.os.Handler.dispatchMessage (Handler.java:100) 在 android.app 的 android.os.Looper.loop(Looper.java:237)。ActivityThread.main(ActivityThread.java:7860) 位于 com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:493) 的 java.lang.reflect.Method.invoke(Native Method) 位于 com.android。 internal.os.ZygoteInit.main(ZygoteInit.java:1075)

标签: javaandroidfirebaseauthenticationfirebase-realtime-database

解决方案


推荐阅读