繁体   English   中英

如何将键和值从Firebase数据库放入哈希图?

[英]How to put the key and value from firebase database to hashmap?

我有数据库中的dataSnapshot列表

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()方法,否则我建议你看我anwser从这个最后部分职位中,我已经解释了如何可以使用自定义的回调来完成。 您也可以观看此视频 ,以更好地理解。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM