首页 > 解决方案 > 通过模型类从 firebasedatabase 获取电话号码时出现空指针异常

问题描述

我正在尝试使用电话号码和密码登录,但通过模型类从 firebase 数据库获取电话号码会给出空指针异常。请帮忙

我已经尝试获取除电话号码外的所有其他正常工作的字符串变量。

模型类

public class Users {

    private String Name;
    private String Address;
    private String Phone;
    private String Email;
    private String Password;

    public Users() {
    }

    public Users(String name, String address, String phone, String email, String password) {
        this.Name = name;
        this.Address = address;
        this.Phone = phone;
        this.Email = email;
        this.Password = password;
    }

    public String getName() {
        return Name;
    }

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

    public String getAddress() { return Address;  }

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

    public String getPhone() {
        return Phone;
    }

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

    public String getEmail() {
        return Email;
    }

    public void setEmail(String email) {
        this.Email = email;
    }

    public String getPassword() {
        return Password;
    }

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

}

登录_活动

private void allowAccesstoAccount ( final String phonestring, final String passwordstring){

    final DatabaseReference database = FirebaseDatabase.getInstance().getReference();
    database.addListenerForSingleValueEvent(new ValueEventListener() {
        @Override
        public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
            if ((dataSnapshot.child(parentName).child(phonestring).exists())) {

                    Users usersData = dataSnapshot.child(parentName).child(phonestring).getValue(Users.class);

                    //`userData.getPhone()` gives warning
                    //while  `userData.getPassword()` works properly 

                    if(usersData.getPhone().equals(phonestring)){
                    if(usersData.getPassword().equals(passwordstring)){
                        Toast.makeText(Login_Activity.this, "Login Successful ", Toast.LENGTH_SHORT).show();
                        loadingBar.dismiss();

                        Intent intent = new Intent(getApplicationContext(),Home_Activity.class);
                        startActivity(intent);
                    }
                }
                else {
                    Toast.makeText(Login_Activity.this, "Login Failed ", Toast.LENGTH_SHORT).show();
                    loadingBar.dismiss();
                }
            }
            else {
                Toast.makeText(Login_Activity.this, "Account with this " + phonestring + " phone number does not exist", Toast.LENGTH_SHORT).show();
                loadingBar.dismiss();
                Toast.makeText(Login_Activity.this, "Try the correct one", Toast.LENGTH_SHORT).show();
            }
        }
        @Override
        public void onCancelled(@NonNull DatabaseError databaseError) {
        }
    });

java.lang. NullPointerException是例外

标签: androiddatabasefirebasemodelnullpointerexception

解决方案


我也遇到了同样的问题。解决方案 :

Firebase 通过 getter setter 方法解析数据,如果找不到正确的 getter,则不会解析,因此有两种解决方案:

  1. 将电话设为公开,以便 firebase 可以直接访问它:

    //私有字符串电话;

    公共字符串电话;

  2. 将 Phone 更改为骆驼符号“phone”并使其 getter setter :

    @SerializedName("Phone") 私人字符串电话;

    公共字符串 getPhone() { 返回电话;}

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


推荐阅读