如图所示,不同日期有不同的药物 喜欢
2019-12-27 Medicine ALTISGPT => "72 u/L"
2019-12-26 Medicine ALTISGPT => "74 u/L"
2019-12-25 Medicine ALTISGPT => "74 u/L"
我想将 MedicineName 映射到具有不同日期的该药物的所有值,例如
ALTISGPT =>["72 u/L","74 u/L","74 u/L"]
所以我尝试创建一个 HashMap 并考虑在出现相同名称时推送值。
首先我将所有内容添加到数组列表中,然后匹配并添加到 vector 中
mUserDatabase=FirebaseDatabase.getInstance().getReference().child("Users").child(uid).child("Medicines");
final HashMap<String, Vector > Med=new HashMap<>();
mUserDatabase.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
for (DataSnapshot childDataSnapshot : dataSnapshot.getChildren()) {
//DATES childDataSnapshot.getKey()
Vector<String> v=new Vector();
for (DataSnapshot childDataSnapshot2 : childDataSnapshot.getChildren()) {
// "MEDICINE NAME" childDataSnapshot2.getKey()
arrayList.add(childDataSnapshot2.getKey());
}}}
@Override
public void onCancelled(DatabaseError databaseError) {}});
然后我这样做了:
for(int i=0;<arrayList.size();i++){
mUserDatabase.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
for (DataSnapshot childDataSnapshot : dataSnapshot.getChildren()) {
//DATES childDataSnapshot.getKey()
Vector<String> v=new Vector();
for (DataSnapshot childDataSnapshot2 : childDataSnapshot.getChildren()) {
// "MEDICINE NAME" childDataSnapshot2.getKey()
if(arrayList.get(i).equals(childDataSnapshot2.getKey()))
v.add(childDataSnapshot2.getValue().toString());
}}}
@Override
public void onCancelled(DatabaseError databaseError) {}});
Med.put(childDataSnapshot2.getKey(),v);
}
但还有一个问题,我知道 Firebase 是异步的,所以如何解决这个问题,这就是为什么我认为我的数组列表是空的 我看到了一些,但无法弄清楚,是不是有些东西不完整
最佳答案
请尝试以下操作以获得结果:
mUserDatabase = FirebaseDatabase.getInstance().getReference().child("Users").child(uid).child("Medicines");
final HashMap<String, Vector> Med = new HashMap<>();
mUserDatabase.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
for (DataSnapshot childDataSnapshot : dataSnapshot.getChildren()) {
for (DataSnapshot childDataSnapshot2 : childDataSnapshot.getChildren()) {
// "MEDICINE NAME" childDataSnapshot2.getKey()
Vector vector;
if(Med.containsKey(childDataSnapshot2.getKey())) {
vector = Med.get(childDataSnapshot2.getKey());
} else {
vector = new Vector();
Med.put(childDataSnapshot2.getKey(), vector);
}
vector.add(childDataSnapshot2.getValue(String.class));
}
}
//Here Med contains all the data
}
@Override
public void onCancelled(DatabaseError databaseError) {
}
});
无需在循环内使用第二个查询。删除该内容
关于java - 如何在firebase中存储每个键的所有值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59517582/