Android 无法以管理员身份登录
在我的应用程序中,我可以作为用户或管理员登录。我可以以用户身份成功登录,但在尝试以管理员身份登录我的应用程序时出错。即使我输入了正确的凭据,我也被重定向到Launcher活动,错误是无法将Long转换为String,但我没有在任何地方使用Long。 物流活动Android 无法以管理员身份登录,android,string,firebase,firebase-realtime-database,long-integer,Android,String,Firebase,Firebase Realtime Database,Long Integer,在我的应用程序中,我可以作为用户或管理员登录。我可以以用户身份成功登录,但在尝试以管理员身份登录我的应用程序时出错。即使我输入了正确的凭据,我也被重定向到Launcher活动,错误是无法将Long转换为String,但我没有在任何地方使用Long。 物流活动 public class loginActivity extends AppCompatActivity { private EditText InputPhoneNumber, InputPassword; privat
public class loginActivity extends AppCompatActivity {
private EditText InputPhoneNumber, InputPassword;
private Button LoginButton;
private ProgressDialog loadingBar;
private TextView AdminLink, NotAdminLink;
private String parentDbName = "Users";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_login);
LoginButton = (Button) findViewById(R.id.Login_btn);
InputPassword = (EditText) findViewById(R.id.login_Password_input);
InputPhoneNumber = (EditText) findViewById(R.id.login_phone_number_input);
AdminLink = (TextView) findViewById(R.id.admin_panel_link);
NotAdminLink = (TextView) findViewById(R.id.not_admin_panel_link);
loadingBar = new ProgressDialog(this);
Paper.init(this);
LoginButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view)
{
LoginUser();
}
});
AdminLink.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view)
{
LoginButton.setText("Login Admin");
AdminLink.setVisibility(View.INVISIBLE);
NotAdminLink.setVisibility(View.VISIBLE);
parentDbName = "Admins";
}
});
NotAdminLink.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view)
{
LoginButton.setText("Login");
AdminLink.setVisibility(View.VISIBLE);
NotAdminLink.setVisibility(View.INVISIBLE);
parentDbName = "Users";
}
});
}
private void LoginUser()
{
String phone = InputPhoneNumber.getText().toString();
String password = InputPassword.getText().toString();
if(TextUtils.isEmpty(phone))
{
Toast.makeText(this, "Please write your phone...", Toast.LENGTH_SHORT).show();
}
else if(TextUtils.isEmpty(password))
{
Toast.makeText(this, "Please write your password...", Toast.LENGTH_SHORT).show();
}
else
{
loadingBar.setTitle("Login Account");
loadingBar.setMessage("Please wait, while we are Checking the Credential");
loadingBar.setCanceledOnTouchOutside(false);
loadingBar.show();
AllowAccessAccount(phone, password);
}
}
private void AllowAccessAccount(final String phone, final String password)
{ final DatabaseReference RootRef;
RootRef = FirebaseDatabase.getInstance().getReference();
RootRef.addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot dataSnapshot)
{
if(dataSnapshot.child(parentDbName).child(phone).exists())
{
Users usersData = dataSnapshot.child(parentDbName).child(phone).getValue(Users.class);
if (usersData != null)
{
if (usersData.getPhone().equals(phone))
{
if (usersData.getPassword().equals(password))
{
if (parentDbName.equals("Admins"))
{
Toast.makeText(loginActivity.this, "Welcome Admin, you are Logged in Successfully..", Toast.LENGTH_SHORT).show();
loadingBar.dismiss();
Intent intent = new Intent(loginActivity.this, AdminCategoryActivity.class);
startActivity(intent);
}
else if (parentDbName.equals("Users"))
{
Toast.makeText(loginActivity.this, "Logged in Successfully..", Toast.LENGTH_SHORT).show();
loadingBar.dismiss();
Intent intent = new Intent(loginActivity.this, HomeActivity.class);
Prevalent.currentOnlineUser = usersData;
startActivity(intent);
}
}
}
else
{
Toast.makeText(loginActivity.this, "Password is Incorrect..", Toast.LENGTH_SHORT).show();
loadingBar.dismiss();
}
}
}
else
{
Toast.makeText(loginActivity.this,"Account with This" + phone + " number do not exist", Toast.LENGTH_SHORT).show();
loadingBar.dismiss();
}
}
@Override
public void onCancelled(@NonNull DatabaseError databaseError)
{
}
});
}
}
Logcat中显示的错误
E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.example.ecommerce1, PID: 4921
com.google.firebase.database.DatabaseException: Failed to convert value of type java.lang.Long to String at com.example.ecommerce1.loginActivity$4.onDataChange(loginActivity.java:123)
用户(模型类)
数据库中的电话类型为
Long
,而Users
POJO类中的电话类型为String
,您需要将POJO类中的类型更改为Long
:
Long phone
另一种解决方案是将其保留为
字符串
,但保存时可以使用pojo类保存到数据库,例如:
Users newUser = new Users("peter","1234556","1232135","image_url","Living_in_StackOverflow_24/7")
DatabaseReference ref = FirebaseDatabase.getInstance().getReference().child("Admin").child("1234556").setValue(newUser);
该错误发生在哪一行?除此之外,请将您的数据库结构添加为JSON文件或至少是屏幕截图。错误在这一行Users usersData=dataSnapshot.child(parentDbName).child(phone).getValue(Users.class);'好的,但请将您的数据库结构添加为JSON文件或至少是一个屏幕截图。是的,我刚刚做了,您可以在上面或上面检查[在应用程序的用户模型中是字符串还是长类型?我如何将数据库中的电话类型更改为字符串,我很感激您的回答,但我稍后在应用程序中以孩子的身份调用该值,并且在调用孩子时,该值以字符串的形式出现。此外,我还对电话在数据库中存储的长度感到惊讶,因为我已经定义了它作为注册活动中的字符串。手机的类型为字符串,您需要将其更改为Long。当您从数据库中呼叫时,您正在检索Long类型的手机,但在POJO中,您将其作为字符串,因此您得到了该错误OK理解,但在将其更改为Long之后,我在任何地方都会收到此错误,我将其称为c我的应用程序中的hild
错误:不兼容类型:Long不能转换为String
好的,那么最好的解决方案是将其保持为String
,当您将数据保存到数据库时,您可以将其保存为String
,但这是我的困惑,我只将其保存为String。我在注册代码中没有使用Long
Users newUser = new Users("peter","1234556","1232135","image_url","Living_in_StackOverflow_24/7")
DatabaseReference ref = FirebaseDatabase.getInstance().getReference().child("Admin").child("1234556").setValue(newUser);