布尔等于表示空对象

时间:2019-03-24 07:41:59

标签: android nullpointerexception

因此,我正在尝试为我的应用程序的服务器端创建一个登录页面。应该只登录那些具有“ IsStaff” =“ true”的用户。...我在此习惯了许多if-else语句代码(用于所有可能的输入,例如IsStaff = false,或者通常输入错误的密码),并且它们都正常工作(我可以这样说,因为它们确实显示了相关的Toast消息)...但是当我尝试从帐户登录 IsStaff = True ....我的应用程序因此在我的logcat中崩溃-

java.lang.NullPointerException: Attempt to invoke virtual method 'boolean java.lang.String.equals(java.lang.Object)' on a null object reference
    at com.example.admincharade.SignIn$2.onDataChange(SignIn.java:66)
    at com.google.android.gms.internal.firebase_database.zzfc.zza(Unknown Source:13)
    at com.google.android.gms.internal.firebase_database.zzgx.zzdr(Unknown Source:2)
    at com.google.android.gms.internal.firebase_database.zzhd.run(Unknown Source:71)
    at android.os.Handler.handleCallback(Handler.java:790)
    at android.os.Handler.dispatchMessage(Handler.java:99)
    at android.os.Looper.loop(Looper.java:164)
    at android.app.ActivityThread.main(ActivityThread.java:6494)
    at java.lang.reflect.Method.invoke(Native Method)
    at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:438)
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:807)

这是登录代码,也是我在此登录方法中引用的User类。请帮帮我。谢谢。同样,很抱歉,如果我没有偶然遵循任何格式设置规则,那么我是个新手,说实话,这么多格式设置选项让我不知所措。

private void signInUser(final String phone, String password) {
    final ProgressDialog mDialog=new ProgressDialog(SignIn.this);
    mDialog.setMessage("Please Wait");
    mDialog.show();
    final String localPhone=phone;
    final String localPassword=password;
    users.addValueEventListener(new ValueEventListener() {
        @Override
        public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
            if(dataSnapshot.child(localPhone).exists())
            {
                mDialog.dismiss();
                User user=dataSnapshot.child(localPhone).getValue(User.class);
                user.setPhone(localPhone);
                if (Boolean.parseBoolean(user.getIsStaff()))
                {
                    if(user.getPassword().equals(localPassword))
                    {
                        Intent login=new Intent(SignIn.this,Home.class);
                        Common.currentUser=user;
                        startActivity(login);
                        finish();
                    }
                    else
                        Toast.makeText(SignIn.this, "Invalid Login", Toast.LENGTH_SHORT).show();
                }
                else
                    Toast.makeText(SignIn.this, "Only for Admin", Toast.LENGTH_SHORT).show();
            }
            else
            {
                mDialog.dismiss();
                Toast.makeText(SignIn.this, "No such user found", Toast.LENGTH_SHORT).show();
            }
        }

public class User {
private String Name,Password,Phone,IsStaff;

public User(String name, String password) {
    Name = name;
    Password = password;
}

这是用户

public User() {
}

public String getName() {
    return Name;
}

public void setName(String name) {
    Name = name;
}

public String getPassword() {
    return Password;
}

public void setPassword(String password) {
    Password = password;
}

public String getPhone() {
    return Phone;
}

public void setPhone(String phone) {
    Phone = phone;
}

public String getIsStaff() {
    return IsStaff;
}

public void setIsStaff(String isStaff) {
    IsStaff = isStaff;
}
}

1 个答案:

答案 0 :(得分:-1)

由于当前情况下user.getPassword()为空,因此您首先需要同时验证密码(分别来自用户名和localPassword)。

private void isValidString(String text){
   return text != null && text.length() > 0;
}

使用上述功能验证两个密码,然后检查它们是否相等。