java - 检索 Firebase 对象空指针异常
问题描述
我收到一个java.lang.NullPointerException
错误,即使我检查mInternshipId
过它与我预期的一样,它也不起作用。
这是我的 Firebase 内容
这是我的实习班
public class Internship {
private String internshipId;
private String internshipTitle;
private String internshipDesc;
private String internshipDate;
private String internshipImage;
private String internshipCreatorId;
public Internship() {
}
public Internship(String internshipId, String internshipTitle, String internshipDesc, String internshipDate, String internshipImage, String internshipCreatorId) {
this.internshipId = internshipId;
this.internshipTitle = internshipTitle;
this.internshipDesc = internshipDesc;
this.internshipDate = internshipDate;
this.internshipImage = internshipImage;
this.internshipCreatorId = internshipCreatorId;
}
public String getInternshipTitle() {
return internshipTitle;
}
public String getInternshipId() {
return internshipId;
}
public void setInternshipId(String internshipId) {
this.internshipId = internshipId;
}
public void setInternshipTitle(String internshipTitle) {
this.internshipTitle = internshipTitle;
}
public String getInternshipDesc() {
return internshipDesc;
}
public void setInternshipDesc(String internshipDesc) {
this.internshipDesc = internshipDesc;
}
public String getInternshipDate() {
return internshipDate;
}
public void setInternshipDate(String internshipDate) {
this.internshipDate = internshipDate;
}
public String getInternshipImage() {
return internshipImage;
}
public void setInternshipImage(String internshipImage) {
this.internshipImage = internshipImage;
}
public String getInternshipCreatorId() {
return internshipCreatorId;
}
public void setInternshipCreatorId(String internshipCreatorId) {
this.internshipCreatorId = internshipCreatorId;
}
}
这是我使用它的地方。它表明 mInternship 没有被初始化。提前感谢大家的时间。
//Get The Internship ID
Intent intent = getIntent();
mInternshipId = intent.getStringExtra(INTERNSHIP_ID);
//Initialize the Database Reference
databaseReference = FirebaseDatabase.getInstance().getReference().child("Internships").child(mInternshipId);
databaseReference.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
//Initialize Useful Variables
mInternship = dataSnapshot.getValue(Internship.class);
organizationId = mInternship.getInternshipCreatorId();
databaseReference = FirebaseDatabase.getInstance().getReference().child("Users").child("Organizations").child(organizationId);
databaseReference.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
internshipLocation = (String) dataSnapshot.child("location").getValue();
}
@Override
public void onCancelled(@NonNull DatabaseError databaseError) {
}
});
}
@Override
public void onCancelled(@NonNull DatabaseError databaseError) {
}
});
解决方案
问题出在这一行
mInternshipId = intent.getStringExtra(INTERNSHIP_ID);
你没有得到额外的东西,所以你不能引用你的 Firebase 数据库中的一个对象,这会导致一个空引用的空指针来检索数据。
确保你在这个类中获得了额外的东西,放置一个调试点并查看mInternshipId
有一种方法可以检查 mInternshipId 是否是问题所在。
databaseReference = FirebaseDatabase.getInstance().getReference().child("Internships").child(mInternshipId);
在没有孩子的情况下运行此行mInternshipId
并对其进行硬编码以获取数据。
databaseReference = FirebaseDatabase.getInstance().getReference().child("Internships").child("-LchJYhSf3uwlv7AAXtr");
如果这适用于硬编码孩子,您可以确保问题出在您的getStringExtra()
.
推荐阅读
- php - 带有 ParamConverter 注释的 Symfony4 Twig 路径
- aws-lambda - amazon lex 聊天机器人可以接受图像作为输入吗?
- amazon-web-services - 如何使用 npm 包(如 activedirectory、ldapjs 或 ldap-client)访问 AWS Microsoft AD
- python - python中的dijkstra实现-输出并不总是正确的
- spring-mvc - 在 Controller 的 RequestMapping 中启用 ConditionalOnProperty
- google-apps-script - 使用云端硬盘搜索结果会导致迭代器错误
- python - tf.image.sample_distorted_bounding_box 中“bounding_boxes”和“min_object_covered”的功能?
- android - 如何根据条件显示布局?
- nginx - nginx配置与位置具有不同的根
- android - 后台定位服务奥利奥