android - 通过模型类从 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
是例外
解决方案
我也遇到了同样的问题。解决方案 :
Firebase 通过 getter setter 方法解析数据,如果找不到正确的 getter,则不会解析,因此有两种解决方案:
将电话设为公开,以便 firebase 可以直接访问它:
//私有字符串电话;
公共字符串电话;
将 Phone 更改为骆驼符号“phone”并使其 getter setter :
@SerializedName("Phone") 私人字符串电话;
公共字符串 getPhone() { 返回电话;}
public void setPhone(String phone) { this.phone = phone; }
推荐阅读
- cypress - 访问 get in then 块的输出
- git - fork 无法从其上游遥控器中拉出:“致命:拒绝合并不相关的历史”
- apache-spark - Dataproc 上的 Spark 失败并出现 java.io.FileNotFoundException:
- php - 我想知道在php中声明多个变量的正确语法,如下所述
- javascript - Facebook 使用 iframe 共享 javascript SDK v3.x
- fastlane - 使用 Fastlane 之前是否需要在 google play 控制台中制作草稿
- laravel - 模型字段请求返回 null
- ruby-on-rails - 从具有祖先宝石的相关子树中查找所有孩子
- objective-c - 如何让画外音光标跳转到 macOS 上的特定元素?
- python - 批量独立示例中的 LSTM 多对多训练