【发布时间】:2019-08-23 22:19:42
【问题描述】:
我想获取每个表单 ID 的客户和设备详细信息。表单 ID 由 firebase 唯一生成。 我只是需要以某种方式访问这些表单 ID。
我已将databaseReference设置如下:
databaseReference = FirebaseDatabase.getInstance().getReference("users").child(userID).child("forms");
然后我尝试了以下代码来检索所需的数据:
databaseReference.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
for (DataSnapshot formsSnapshot : dataSnapshot.getChildren()) {
for (DataSnapshot formIDSnapshot : formsSnapshot.getChildren()) {
Device device = formIDSnapshot.getValue(Device.class);
if (device != null) {
// get and use the data
}
}
}
}
@Override
public void onCancelled(@NonNull DatabaseError databaseError) {
}
});
更新: 感谢@Frank 的回答,我现在可以成功检索表单ID。 现在,要获取设备和客户详细信息,我必须在获取表单 ID 后在 ValueEventListener 中编写以下代码:
databaseReference.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
for (DataSnapshot formsSnapshot : dataSnapshot.getChildren()) {
String formID = formsSnapshot.getKey(); //Retrieving the formID here
//New code addition
// to get the reference to device details node
databaseReference.child(Objects.requireNonNull(formID)).child("Device details").addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
Device device = dataSnapshot.getValue(Device.class);
if (device != null) {
// required device details here
}
}
@Override
public void onCancelled(@NonNull DatabaseError databaseError) {
throw databaseError.toException();
}
});
// to get the reference to customer details node
databaseReference.child(Objects.requireNonNull(formID)).child("Customer details").addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
Customer customer = dataSnapshot.getValue(Customer.class);
if (customer != null) {
//required customer details here
}
}
@Override
public void onCancelled(@NonNull DatabaseError databaseError) {
throw databaseError.toException();
}
});
}
}
@Override
public void onCancelled(@NonNull DatabaseError databaseError) {
throw databaseError.toException();
}
});
我知道这是一个杂乱无章的代码,我希望得到一些更简洁的方法。
【问题讨论】:
-
这样你就可以访问数据,剩下的就是每个文档的 id 了吗?
标签: android firebase-realtime-database