如何使用映射字符串对象 firebase 检索复选框的数据

问题描述 投票:0回答:1

我使用以下方法在 firebase 中上传数据:

 HashMap<String, Object> m = new HashMap<String, Object>();
                    if(approved.isChecked()){
                    m.put("qDepartmentHeadApproval",approved.getText().toString());}
                    else{
                    m.put("rDepartmentHeadApproval",rejected.getText().toString());}

我想使用这个从 Firebase 检索此数据

Map<String, Object> map=(Map<String, Object>) dataSnapshot.getValue();

但是我能怎样呢?

我希望数据将以单个文本视图形式从 Firebase 中选定的复选框中检索。

java android firebase-realtime-database
1个回答
0
投票

由于您小时候将

Map
推向 firebase,那么当您使用
dataSnapshot.getValue();

您将获得一张地图,具体取决于它是否是正确的子键。

我知道你已经知道这一点,但你知道如何阅读地图不是吗?

Map<String, Object> data = (Map<String, Object>) dataSnapshot.getValue();

if (data.containsKey("qDepartmentHeadApproval")) {
    String s = (Strting) data.get("qDepartmentHeadApproval");
}

s
是您的数据。 您正在使用您使用的密钥查找数据,在本例中为
qDepartmentHeadApproval

返回的值将是一个字符串,因为您推送了一个字符串。

映射是键到值,

map.get("key")
返回该键的值。

存在大量转换,您最终可能会在将来遇到错误,而无需实际正确检查值。

Firebase 返回的地图在 Java 中始终是

Map<String, Object>
,但它并不总是地图。

你可以尝试这样的事情:

//suppress the unchecked cast warning
@SuppressWarnings("unchecked")
public void loadData() {
   Object value = dataSnapshot.getValue();
   //check if the value is a map.
   if (value instanceof Map<?, ?>) {
       //cast the value to a map
       Map<String, Object> data = (Map<String, Object>) value;
       //check if the map contains the key and the value is a string
       if (data.containsKey("key") && data.get("key") instanceof String) {
            String s = (String) data.get("key");
       }
    }
}

这基于Java 8。我知道可以使用更高的java来减少它。 您还可以对

getValue()
使用 GenericTypeIndicator,但它的作用并不大。它只是为了处理java中的类型擦除并删除警告的使用。

您也可以删除

containsKey
部分。我只是为了安心而保留它。

无论如何..您应该在投射之前检查这些值。我知道这是非常重复的,但您将来会避免很多潜在的问题。相信我。

© www.soinside.com 2019 - 2024. All rights reserved.