android - 通过 ID 列表获取元素然后在列表视图上显示它们的正确方法是什么?-Firebase Android
问题描述
根据文档,当涉及到数据库关系时,我们应该避免嵌套数据。所以我将我的数据结构化如下:
{
"rides": {
"ride1": {
"price": "500",
"bids": {
// the value here doesn't matter, just that the key exists
"bid1": true,
"bid2": true
}
},
...
},
"bids": {
"bid1": {
"price": "550",
"ride": "ride1"
},
...
}
}
在我的应用程序的一个页面中,用户应该能够看到链接到ListView中所选“乘车”的所有“出价” 。我的尝试是:在 arrayList 中获取出价的键,然后按一个键获取出价。我的问题是我必须一次在列表视图中显示所有出价。
bidsListener = new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
ArrayList<String> bidskeysOfActiveRideArrayList = new ArrayList<>();
for (DataSnapshot snapshot : dataSnapshot.getChildren()) {
Boolean IsbidLinkedToThisRid = snapshot.getValue(Boolean.class);
if (IsbidLinkedToThisRid) {
String bidObjectId = dataSnapshot.getKey();
bidskeysOfActiveRideArrayList.add(bidObjectId);
}
}
fetchMultipleBidsByKeys(bidskeysOfActiveRideArrayList);
}
@Override
public void onCancelled(DatabaseError databaseError) {
}
};
databaseReference.child("rides").child(ride.getID()).child("bids").addValueEventListener(bidsListener);
两个函数在这里:
private void fetchMultipleBidsByKeys(ArrayList<String> bidskeysOfActiveRideArrayList) {
ArrayList<Bid> bidsArrayList = new ArrayList<>();
for (String bid_id:bidskeysOfActiveRideArrayList){
bidsArrayList.add(getBidByKey(bid_id));
}
displayBidList(bidsArrayList);
}
private Bid getBidByKey(String bidObjectId) {
final Bid[] bidFetched = {null};
ValueEventListener bidsSingleFetcher = new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
for (DataSnapshot snapshot : dataSnapshot.getChildren()) {
bidFetched[0] = snapshot.getValue(Bid.class);
}
}
@Override
public void onCancelled(DatabaseError databaseError) {
}
};
databaseReference.child("bids").child(bidObjectId).addListenerForSingleValueEvent(bidsSingleFetcher);
return bidFetched[0];
}
但是,firebase 数据获取是异步的。那么通过ID列表获取元素然后在列表视图上显示它们的正确方法是什么?
解决方案
推荐阅读
- javascript - 如何使用依赖于两个按钮启动和停止的 React Hooks 制作计数器?
- python - discord.py 中的提醒命令问题
- sql - 根据 SQL 查询 (SQL Server) 中的其他列创建自定义列
- c# - Jenkins 从 nuget.org 下载 nuget 包,即使我已经从 NuGet.config 中删除了提要
- javascript - 如何在javasript中为数组对象的特定对象设置值
- python - 用于重启 ec2 实例的 aws lambda python 函数不起作用
- angular - 离子错误(无法获取 /)
- r - 合并循环的输出
- python - 一行代码设置一整列的值
- python - 如何修补“python --version”命令?