因此,我正在尝试为我的应用程序的服务器端创建一个登录页面。应该只登录那些具有“ 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;
}
}
答案 0 :(得分:-1)
由于当前情况下user.getPassword()为空,因此您首先需要同时验证密码(分别来自用户名和localPassword)。
private void isValidString(String text){
return text != null && text.length() > 0;
}
使用上述功能验证两个密码,然后检查它们是否相等。