【发布时间】:2017-07-20 23:07:30
【问题描述】:
我已成功实施 geoFire 以从用户区域内的主 firebase 节点获取条目的键。
然后我尝试将这些键存储在一个新的唯一节点中,以便以后使用它们来填充 viewHolder,因为这似乎是最佳实践。
问题是我不希望存储在唯一节点中的所有对象都实际填充 viewHolder;我只想要其中的一部分。
如果我在 populateViewHolder 方法中进行过滤,例如,
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
SwarmReport retrievedModel = dataSnapshot.getValue(SwarmReport.class);
if(!retrievedModel.isClaimed()){
viewHolder.bindSwarmReport(retrievedModel);
}
}
我在 viewHolder 中得到一些空白的项目。
如果我尝试在设置 FirebaseAdapter 之前进行过滤,例如在我的 addGeoQueryEventListener 方法中,我必须添加一个 addListenerForSingleValueEvent 来检查我打算过滤的条件:
public void onKeyEntered(String key, GeoLocation location) {
claimCheckKey = key;
final DatabaseReference claimCheckRef = FirebaseDatabase.getInstance().getReference("all").child(key);
claimCheckRef.addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
SwarmReport claimCheckSwarmReport = dataSnapshot.getValue(SwarmReport.class);
if (!claimCheckSwarmReport.isClaimed()){
swarmReportIds.add(claimCheckKey);
}
}
似乎onGeoQueryReady 在addListenerForSingleValueEvent in onKeyEntered 完成之前执行。关于如何让onGeoQueryReady 等待所有 swarmReportIds.add(claimCheckKey) 完成的任何建议?
【问题讨论】:
-
我能做些什么来澄清这个问题吗?
-
您找到问题的答案了吗?
标签: android firebase firebase-realtime-database geofire event-listener