如何将火碱数据库中的键和值放入哈希图?



我有这个数据库的数据快照列表

dataSnapshot:
"DataSnapshot { key = personTypes,
value = {RESIDENT_HOMEOWNER=Resident Homeowner, 
RESIDENT_RELATIVE=Resident Relative,
ADMIN=Admin, DRIVER_OUT=Driver Stay-out} }"

和来自数据:(数据库(

data:
"DataSnapshot { key = ADMIN,
value = Admin }"

我的代码是

private Map<String, String> personTypeToDisplayMap = new HashMap<>();
private Map<String, String> displayToPersonTypeMap = new HashMap<>();
public void fetchPersonTypes() {
getDbRefKlearyan().child("personTypes").addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
if(dataSnapshot.hasChildren()) {
for(DataSnapshot data : dataSnapshot.getChildren()) {
personTypeToDisplayMap.put(data.getKey(), data.getValue(String.class));
displayToPersonTypeMap.put(data.getValue(String.class), data.getKey());
}
}
}
@Override public void onCancelled(DatabaseError databaseError) {}
});
}

现在,我的问题是我无法在personTypetoDisplayMap和displayToPersonTypeMap中存储任何数据。每次调试应用程序时,它的大小始终为 size=0。

我也尝试做personTypeToDisplayMap.put("string", "sassy");用于测试,但结果相同

您现在无法使用尚未加载的内容。换句话说,您不能简单地在onDataChange()方法之外使用personTypeToDisplayMapdisplayToPersonTypeMap映射,因为由于此方法的异步行为,它始终具有zero的大小。这意味着,当您尝试在该方法之外使用这些地图时,数据尚未完成从数据库加载,这就是无法访问的原因。

解决此问题的快速方法是仅在onDataChange()方法中使用这两个映射,否则我建议您查看这篇文章中我的文章的最后一部分,其中我解释了如何使用自定义回调来完成它。您也可以观看此视频以更好地了解。

最新更新