2017-06-14 17 views
0

私はこの問題を持っている私が解決することはできません。

を私は火災ベースのデータベースからいくつかのデータを取得しています。 タイトルカラム になると、タイトルカラムがjsonツリーでキー値の行があるため、ここに新しいロジックを記述する必要があるため、すべてのフィンは動作しません。私はこれまで
そのエントリを作成し、私が作成した私のConfigItemクラス内のハッシュマップに保存してみました何

私はデータを受け取っても問題ありませんが、誰がそれをループするかわかりません。私は、whileループの3行目に達したとき、私は私がここに欠けている何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; 
    } 

} 
+1

https://stackoverflow.com/questions/31832337/javaする必要があります-lang-classcastexception-java-util-hashmapentryset-can-to-cast-to-java –

+0

@Wajdi:問題が解決した場合は、回答を追加してそれを受け入れます。その質問がもう役に立たないと思うなら、それを削除してください。いずれにしても、問題の本文を削除しないでください。 –

答えて

0

あなたはMap.EntrySetをキャストしようとしています。

ループの状態は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(); 
+0

@wajdi、いずれかが正しければ、それを受け入れてください。 – mikep

関連する問題