我有这个问题无法解决:
我正在从 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;
}
}
您正在尝试将
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>();
}
线路
Map.Entry<String, Object> pair = (Map.Entry<String , Object>) data.entrySet() ;
应该是
Map.Entry<String, Object> pair = (Map.Entry<String , Object>) iterator.next();