java - 使用从 valueEventListener 之外的 Firebase 数据库检索的值
问题描述
我正在使用 android 中的 Java 和 Firebase 开发一个应用程序,因为我从 Firebase 数据库中检索数据。这是我的代码
databaseReference.orderByChild("email").equalTo(email).addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
for (DataSnapshot dataSnapshot1 : dataSnapshot.getChildren()) {
AddFaculty addFaculty = dataSnapshot1.getValue(AddFaculty.class);
department = addFaculty.getDepartment();
year = addFaculty.getYear();
}
}
@Override
public void onCancelled(@NonNull DatabaseError databaseError) {
}
});
模型类
public class AddFaculty {
private String name;
private String email;
private String position;
private String department;
private String year;
private String facultyId;
public AddFaculty() {
}
public AddFaculty(String name, String email, String position, String department, String year, String facultyId) {
this.name = name;
this.email = email;
this.position = position;
this.department = department;
this.year = year;
this.facultyId = facultyId;
}
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 getPosition() {
return position;
}
public void setPosition(String position) {
this.position = position;
}
public String getDepartment() {
return department;
}
public void setDepartment(String department) {
this.department = department;
}
public String getYear() {
return year;
}
public void setYear(String year) {
this.year = year;
}
public String getFacultyId() {
return facultyId;
}
public void setFacultyId(String facultyId) {
this.facultyId = facultyId;
}
}
这是我的问题。我想在 valueEventListener 之外使用“addFaculty”或部门和年份变量。我知道很多人问过与此相关的问题。我尝试了许多与此问题相关的解决方案,但没有奏效。因此,如果您知道如何实现这一目标,那将是很大的帮助。
解决方案
创建一个接口来访问变量
interface CallbackFaculty {
void passFaculty(AddFaculty addFaculty);
}
然后您可以使用接口参数创建一个函数
private void getFaculty(CallbackFaculty callbackFaculty) {
databaseReference.orderByChild("email").equalTo(email).addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
for (DataSnapshot dataSnapshot1 : dataSnapshot.getChildren()) {
AddFaculty addFaculty = dataSnapshot1.getValue(AddFaculty.class);
department = addFaculty.getDepartment();
year = addFaculty.getYear();
callbackFaculty.passFaculty(addFaculty);
}
}
@Override
public void onCancelled(@NonNull DatabaseError databaseError) {
}
});
}
使用方法
getFaculty(new CallbackFaculty {
@Override
public void passFaculty(AddFaculty addFaculty) {
// here you have the access of addFaculty
// you can try logging addFaculty to check the value
}
});
希望对你有帮助
推荐阅读
- javascript - Ionic 3 未在图像 src 中显示相机 FILE_URI 路径
- jmeter - 通过 jmeter 没有响应,但通过 POSTMAN 对相同的 REST API 做出正确响应
- plc - 如何使用 OPCAutomation.dll 检查 plc 设备是否断开连接
- java - 无法通过代理调用 API
- rest - 从 Office365 Graph API 中的字符串设置消息
- jquery - 用 jquery 触发按键不起作用
- c# - GC 的 Xamarin 调试输出的含义
- xml - 相对路径在 WIX 和 XML 中不起作用并显示错误“系统找不到文件”
- electron - Theia 的 Electron 示例不运行
- signing - 使用 iText7 签名的 PDF/A 允许在不破坏签名的情况下更改附加文档