![在此处输入图片描述][1]
mAdapter = new FirebaseRecyclerAdapter<Adapter_Hotels, Adapter_HotelsHolder>(mOptions) {
@Override
protected void onBindViewHolder(@NonNull final Adapter_HotelsHolder holder, int position, @NonNull Adapter_Hotels model) {
String key = getRef(position).getKey();
mRef1 = mRef.child(key).child("rooms");
mRef1.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
for (DataSnapshot child : dataSnapshot.getChildren()) {
roomkey = child.getKey();
}
minmax.clear();
mRef2 = mRef1.child(roomkey).child("promos").child("regular").child(ym).child("price").child(guest);
mRef2.addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
for (DataSnapshot dataSnapshot1 : dataSnapshot.getChildren()) {
}
}
@Override
public void onCancelled(@NonNull DatabaseError databaseError) {
}
});
}
@Override
public void onCancelled(@NonNull DatabaseError databaseError) {
}
});
}
这是我所有的查询。这是可取的吗?一切正常,我删除了所有用于检索的代码。我的问题是还有其他更好或更清洁的方法吗?
最佳答案
您的代码看起来比需要的要复杂一些。据我所知,您可以通过以下方式实现完全相同的效果:
mRef1 = mRef.child(key).child("rooms");
mRef1.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
for (DataSnapshot roomSnapshot: dataSnapshot.getChildren()) {
roomkey = child.getKey();
DataSnapshot priceSnapshot = roomSnapshot.child(roomkey).child("promos").child("regular").child(ym).child("price").child(guest);
System.out.println(priceSnapshot.getValue());
});
}
@Override
public void onCancelled(@NonNull DatabaseError databaseError) {
throw databaseError.toException();
}
});
变化:
- 不要将
onCancelled
留空,因为未检测到的错误确实很难解决。 - 将价格查找放在循环中,以便查找所有房间的价格。如果您只想查找一个房间的价格,则应该使用查询来只读取那个房间。
- 没有必要为价格本身使用单独的监听器,因为(据我所知)价格已经在
rooms
的dataSnapshot
中。
关于android - 我如何从 firebase 获取多个 key ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54828111/