java.lang.ClassCastException 无法转换为 java.util.Map$Entry

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

我有这个问题无法解决:

我正在从 Fire Base 数据库获取一些数据。 除了当我到达title栏时,一切都正常 因为标题列是一个 json 树,它有一个键值行,所以必须在这里编写新的逻辑。

到目前为止我尝试过的事情
为其创建一个条目并将其保存在我创建的 ConfigItem 类内的哈希映射中。

我收到数据很好,但我不知道该循环给谁。

当我到达 while 循环中的第三行时,我得到了

java.lang.ClassCastException: java.util.HashMap$EntrySet cannot be cast to java.util.Map$Entry

我在这里缺少什么?

public class DataMappingConfig implements DataMappingStrategy {

@Override
public Object mapData(HashMap<String, Object> data ) {

    Log.i("key set " , data.keySet().toString() + " key set ") ;
    HashMap<String , Object > mpair  =null ;
    HashMap<String, String> titlepairs = null ;

    for (String key : data.keySet()) {
        if (key.equals(KEY_TITLE)) {

            final Iterator iterator = data.entrySet().iterator();

            while (iterator.hasNext()){
                mpair = new HashMap<String , Object >() ;
                Map.Entry<String, Object> pair = (Map.Entry<String , Object>) data.entrySet() ;
                HashMap<String,HashMap<String , String>> titleMap = (HashMap<String, HashMap<String, String>>) pair.getValue();
                titlepairs = new HashMap<String, String>();;

            }
        }
    }
        ConfigItem conf = new ConfigItem();
        if (data.containsKey(KEY_LOGIN)) {
            conf.setLogin((Boolean) data.get(KEY_LOGIN)); // note the import above
        }
        if (data.containsKey(KEY_ICON)) {
            conf.setIcon((String) data.get(KEY_ICON));
        }
        if (data.containsKey(KEY_MAIN_SCREEN_ORDER)) {
            conf.setNum(safeLongToInt((Long) data.get(KEY_MAIN_SCREEN_ORDER)));
        }
        if (data.containsKey(KEY_MODE)) {
            String modeValue = (String) data.get(KEY_MODE);
            if (modeValue.equals(VALUE_MODE_EMERGENCY)) {
                conf.setEmenrgency(true);
            } else if (modeValue.equals(VALUE_MODE_ROUTINE)) {
                conf.setRoutine(true);
            }
            conf.setMode((String) data.get(KEY_MODE));
        }
        if (data.containsKey(KEY_STATUS)) {
            conf.setStatus((String) data.get(KEY_STATUS));
        }
        if (data.containsKey(KEY_SHOW_DATE)) {
            try {

                conf.setShowDate((Boolean) data.get(KEY_SHOW_DATE));
            } catch (IllegalArgumentException e) {
                e.printStackTrace();
                Log.i("ERROR", "" + e.getLocalizedMessage());
            }
        }


        Log.i("Data Map config ", "conf item = " + conf.toString() + "\n");


        return conf;
    }

}
android firebase hashmap
2个回答
0
投票

您正在尝试将

Set
转换为
Map.Entry

由于循环的条件是

while (iterator.hasNext())
,我假设您打算在循环内使用
iterator.next()

更改:

Map.Entry<String, Object> pair = (Map.Entry<String , Object>) data.entrySet();

至:

Map.Entry<String, Object> pair = (Map.Entry<String , Object>) iterator.next();

或者更好的是,改变:

final Iterator iterator = data.entrySet().iterator();

至:

final Iterator<Map.Entry<String , Object>> iterator = data.entrySet().iterator();

然后你就根本不需要那个演员了:

while (iterator.hasNext()){
    mpair = new HashMap<String , Object >() ;
    Map.Entry<String, Object> pair = iterator.next();
    HashMap<String,HashMap<String , String>> titleMap = (HashMap<String, HashMap<String, String>>) pair.getValue();
    titlepairs = new HashMap<String, String>();
}

0
投票

线路

Map.Entry<String, Object> pair = (Map.Entry<String , Object>) data.entrySet() ;

应该是

Map.Entry<String, Object> pair = (Map.Entry<String , Object>) iterator.next();
© www.soinside.com 2019 - 2024. All rights reserved.