我有这个问题我无法解决:
我从fire base数据库中获取了一些数据。 除非我到达标题列,否则每件事都会起作用 因为标题列是一个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;
}
}
答案 0 :(得分: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>();
}
答案 1 :(得分:0)
该行
Map.Entry<String, Object> pair = (Map.Entry<String , Object>) data.entrySet() ;
应该是
Map.Entry<String, Object> pair = (Map.Entry<String , Object>) iterator.next();