android - 从 firebase 实时数据库获取用户数据返回 null
问题描述
我需要帮助。当我注册用户时,用户数据会上传到“用户”表。在主要活动中,我试图获取该数据,但出现错误
这是主要活动
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
phone = findViewById(R.id.profilePhone);
fullName = findViewById(R.id.profileName);
email = findViewById(R.id.profileEmail);
resetPassLocal = findViewById(R.id.resetPasswordLocal);
profileImage = findViewById(R.id.profileImage);
changeProfileImage = findViewById(R.id.changeProfile);
fAuth = FirebaseAuth.getInstance();
fStore = FirebaseFirestore.getInstance();
storageReference = FirebaseStorage.getInstance().getReference();
firebaseDatabase = FirebaseDatabase.getInstance();
reference = FirebaseDatabase.getInstance().getReference("user");
StorageReference profileRef = storageReference.child("users/"+fAuth.getCurrentUser().getUid()+"/profile.jpg");
profileRef.getDownloadUrl().addOnSuccessListener(new OnSuccessListener<Uri>() {
@Override
public void onSuccess(Uri uri) {
Picasso.get().load(uri).into(profileImage);
}
});
resendCode = findViewById(R.id.resendCode);
verifyMsg = findViewById(R.id.verifyMsg);
userId = fAuth.getCurrentUser().getUid();
user = fAuth.getCurrentUser();
if(!user.isEmailVerified()){
reference.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot snapshot) {
users_model user = snapshot.getValue(users_model.class);
String userName = user.getName();
String userPhone = user.getPhone();
String useremail = user.getEmail();
fullName.setText(userName);
phone.setText(userPhone);
email.setText(useremail);
}
@Override
public void onCancelled(@NonNull DatabaseError error) {
Toast.makeText(getApplicationContext(), "Something went wrong", Toast.LENGTH_LONG).show();
}
changeProfileImage.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// open gallery
Intent i = new Intent(v.getContext(),EditProfile.class);
i.putExtra("fullName",fullName.getText().toString());
i.putExtra("email",email.getText().toString());
i.putExtra("phone",phone.getText().toString());
startActivity(i);
}
});
}
这是模型类
public class users_model {
private String name;
private String email;
private String phone;
private String type;
public users_model() {
}
public users_model(String name, String email, String phone, String type) {
this.name = name;
this.email = email;
this.phone = phone;
this.type = type;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
public String getPhone() {
return phone;
}
public void setPhone(String phone) {
this.phone = phone;
}
public String getType() {
return type;
}
public void setType(String type) {
this.type = type;
}
}
这是错误
E/AndroidRuntime:致命异常:主进程:com.example.firebase_auth,PID:27880 java.lang.NullPointerException:尝试调用虚拟方法'java.lang.String com.example.firebase_auth.users_model.getName()'在 com.google.firebase.database.core.ValueEventRegistration.fireEvent(ValueEventRegistration.java:75) 在 com.google.firebase.database 的 com.example.firebase_auth.MainActivity$3.onDataChange(MainActivity.java:126) 的空对象引用.core.view.DataEvent.fire(DataEvent.java:63) 在 com.google.firebase.database.core.view.EventRaiser$1.run(EventRaiser.java:55) 在 android.os.Handler.handleCallback(Handler. java:873) 在 android.os.Handler.dispatchMessage(Handler.java:99) 在 android.os.Looper.loop(Looper.java:193) 在 android.app.ActivityThread.main(ActivityThread.java:6669) 在java.lang.reflect.方法。在 com.android.internal.os.ZygoteInit.main(ZygoteInit.java:858) 的 com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:493) 调用(本机方法)
解决方案
推荐阅读
- java - ArgumentException:在字符 xx 处遇到“”,但应为:[]
- python - Python中的高效重复数据删除
- c# - 如何在 C# 中以编程方式创建 SQL Server 数据库 - 为每个项目创建新 SQL Server 数据库的项目管理应用程序
- node.js - 无法从 'src/*' Typescript 中找到模块 ''
- python - 如何从我的数据框中获得将所选国家/地区的 2 个标准分开的图表
- swift - 如何将多个音频 AVCaptureDevice 添加到 AVCaptureSession
- xcode - MacBook Air M1 芯片上的可可豆荚问题,Big Sur OS v11.6.1
- linux - 更改 Docker 容器中 shm 的默认挂载选项
- python - 用 python selenium 自动填充验证码图像编号
- react-native - React Navigation navigation.replace() 在 useEffect 中使应用程序崩溃