【发布时间】:2021-10-08 01:24:22
【问题描述】:
我正在尝试进行管理员登录,但我的登录活动一直给我错误,有两种方法可以登录管理员,他们会点击另一个文本视图来更改一些设置然后登录...登录对用户来说很好,但是管理员它一直给我错误..
我的登录活动:
private TextView register;
private Button login;
private TextInputLayout phoneNum, inputPassword;
private ProgressDialog loadingDialog;
private TextView adminLink, notAdminLink, title;
private String parentDbName = "Users";
private CheckBox rememberMe;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_login);
AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_NO);
loadingDialog = new ProgressDialog(this);
title = findViewById(R.id.title);
//Button
register = findViewById(R.id.register);
login = findViewById(R.id.loginBtn);
//EditText
phoneNum = findViewById(R.id.login_phone_num);
inputPassword = findViewById(R.id.login_passBox);
//Checkbox
rememberMe = findViewById(R.id.remember_me_chk);
//admin
adminLink = findViewById(R.id.admin_link);
notAdminLink = findViewById(R.id.not_admin);
register.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
startActivity(new Intent(LoginActivity.this, RegisterActivity.class));
finish();
}
});
//CheckBox EVERY time app start
SharedPreferences preferences = getSharedPreferences("checkBox", MODE_PRIVATE);
String checkBox = preferences.getString("remember", "");
if (checkBox.equals("true")) {
startActivity(new Intent(LoginActivity.this, MainActivity.class));
finish();
} else if (checkBox.equals("false")) {
Toast.makeText(this, "Please Sign In.", Toast.LENGTH_SHORT).show();
}
login.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
LoginUser();
}
});
// Automatically Login
rememberMe.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton compoundButton, boolean b) {
if (compoundButton.isChecked()) {
SharedPreferences preferences = getSharedPreferences("checkBox", MODE_PRIVATE);
SharedPreferences.Editor editor = preferences.edit();
editor.putString("remember", "true");
editor.apply();
} else if (!compoundButton.isChecked()){
SharedPreferences preferences = getSharedPreferences("checkBox", MODE_PRIVATE);
SharedPreferences.Editor editor = preferences.edit();
editor.putString("remember", "false");
editor.apply();
}
}
});
//Admins
adminLink.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
login.setText(R.string.Admin_login);
title.setText(R.string.admin_panel_title);
rememberMe.setVisibility(View.INVISIBLE);
adminLink.setVisibility(View.INVISIBLE);
notAdminLink.setVisibility(View.VISIBLE);
parentDbName = "Admins";
}
});
notAdminLink.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
login.setText(R.string.login);
title.setText(R.string.login);
rememberMe.setVisibility(View.VISIBLE);
adminLink.setVisibility(View.VISIBLE);
notAdminLink.setVisibility(View.INVISIBLE);
parentDbName = "Users";
}
});
}
private void LoginUser() {
String phone = phoneNum.getEditText().getText().toString();
String pass = inputPassword.getEditText().getText().toString();
if (TextUtils.isEmpty(phone)) {
Toast.makeText(this, "Please Enter Your PhoneNum.", Toast.LENGTH_SHORT).show();
} else if (TextUtils.isEmpty(pass)) {
Toast.makeText(this, "Please Enter Your Password.", Toast.LENGTH_SHORT).show();
} else {
loadingDialog.setTitle("Login Your Account...");
loadingDialog.setMessage("Connecting...");
// prevent it from disappearing when clicked outside
loadingDialog.setCanceledOnTouchOutside(false);
loadingDialog.show();
AccessAccount(phone,pass);
}
}
private void AccessAccount(String phone, String pass) {
final DatabaseReference rootRef;
rootRef = FirebaseDatabase.getInstance().getReference();
rootRef.addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot snapshot) {
if (snapshot.child(parentDbName).child(phone).exists()) {
Users userData = snapshot.child(parentDbName).child(phone).getValue(Users.class);
if (userData.getPhone().equals(phone)) {
if (userData.getPassword().equals(pass)) {
if (parentDbName.equals("Admins")) {
Toast.makeText(LoginActivity.this, "Admin: " + userData.getName() + "\nWish You have a good Day", Toast.LENGTH_SHORT).show();
loadingDialog.dismiss();
startActivity(new Intent(LoginActivity.this, AdminCategoryActivity.class));
finish();
} else if (parentDbName.equals("Users")) {
Toast.makeText(LoginActivity.this, "Welcome Back " + userData.getName() + " Wish You have a good Day", Toast.LENGTH_SHORT).show();
loadingDialog.dismiss();
startActivity(new Intent(LoginActivity.this, MainActivity.class));
finish();
}
} else {
Toast.makeText(LoginActivity.this, "Password is Incorrect.", Toast.LENGTH_SHORT).show();
loadingDialog.dismiss();
}
}
} else {
Toast.makeText(LoginActivity.this, "This phone Number doesn't Exist.", Toast.LENGTH_SHORT).show();
loadingDialog.dismiss();
}
}
@Override
public void onCancelled(@NonNull DatabaseError error) {
}
});
}
错误信息:
【问题讨论】:
-
Users phone 字段是 String 但在 firebase 中,我猜您将 phone 存储为 Long 。纠正我如果我错了。请包括用户类以及 Firebase 数据以进行说明
-
请编辑您的问题并将您的数据库结构添加为 JSON 文件。您可以通过单击 Firebase Console 的溢出菜单 (⠇) 中的导出 JSON 来简单地获取它,并指明您想要获取的确切数据。请回复@AlexMamo
标签: android firebase firebase-realtime-database