2017-06-14 7 views
0

Ich habe dieses Problem, das ich nicht lösen kann:

Ich erhalte einige Daten aus Feuer Basis-Datenbank. Alles funktioniert Finnen, außer wenn ich die Titel Spalte erreichen, weil die Titelspalte ist ein JSON-Baum und es haben eine Schlüsselwerte Zeilen so eine neue Logik muss hier geschrieben werden.

Was habe ich versucht, so weit
für einen Eintrag erstellen und es in Hash-Karte in meiner ConfigItem Klasse speichern, die ich erstellt.

Ich erhalte die Daten in Ordnung, aber ich weiß nicht, wer es durchlaufen soll.

Als ich die dritte Zeile in der while-Schleife zu erreichen, habe ich java.lang.ClassCastException: java.util.HashMap$EntrySet cannot be cast to java.util.Map$Entry

Was ich hier fehlt?

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; 
    } 

} 
+1

sein https://stackoverflow.com/questions/31832337/java -lang-classcastexception-java-util-hashmapentryset-kann nicht-cast-to-java sein –

+0

@Wajdi: Wenn Ihr Problem gelöst wurde, fügen Sie eine Antwort hinzu und akzeptieren Sie diese. Wenn Sie die Frage nicht mehr für nützlich halten, löschen Sie sie. So oder so: Entfernen Sie den Fragetext nicht. –

Antwort

0

Sie versuchen, eine Set einen Map.Entry zu werfen.

Da der Zustand Ihrer Schleife while (iterator.hasNext()) ist, gehe ich davon aus, dass Sie innerhalb der Schleife iterator.next() verwenden möchten.

Wechsel:

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

zu:

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

Oder noch besser, ändern:

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

zu:

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

Und dann werden Sie nicht, dass die Besetzung brauchen überhaupt:

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

Die Linie

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

sollte

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

@wajdi, wenn beide korrekt sind, dann bitte eins akzeptieren. – mikep

Verwandte Themen