Невозможно войти как администратор - PullRequest
2 голосов
/ 18 марта 2020

В моем приложении я могу войти как пользователь или администратор. Я могу успешно войти в систему как пользователь, но я получаю сообщение об ошибке при попытке войти в систему как администратор в моем приложении. Даже если я ввожу правильные учетные данные, меня перенаправляют на Launcheractivity Ошибка говорит, что не может конвертировать Long в String, но я нигде не использовал Long. Структура базы данных

loginactivity

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)

Пользователь (класс модели)

package com.example.ecommerce1.Model;

public class Users {
    private String name, phone, password, image,address;

    public Users()
    {

    }

    public Users(String name, String phone, String password, String image, String address)
    {
        this.name = name;
        this.phone = phone;
        this.password = password;
        this.image = image;
        this.address = address;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getPhone() {
        return phone;
    }

    public void setPhone(String phone) {
        this.phone = phone;
    }

    public String getPassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = password;
    }

    public String getImage() {
        return image;
    }

    public void setImage(String image) {
        this.image = image;
    }

    public String getAddress() {
        return address;
    }

    public void setAddress(String address) {
        this.address = address;
    }
}

1 Ответ

0 голосов
/ 18 марта 2020
Телефон

в вашей базе данных имеет тип Long и телефон в вашем Users классе POJO имеет тип String, вам нужно изменить тип в вашем классе POJO на Long:

Long phone

Другое решение - сохранить его как String, но при сохранении вы можете использовать класс 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);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...