2016-04-25 14 views
0

私はSharedPreferencesにHashMapを保存するためにtriyngが、私はマップをロードするとき、私はこのエラーを取得:保存ハッシュマップの共有設定

とjava.lang.ClassCastException:org.json.JSONArrayは、Javaにキャストすることはできません。 util.List

私はオンラインで見つかったコードを適合させましたが、なぜこのエラーが出るのか分かりません。ここで

がコードされています

public static Map<String, List<Integer>> loadMap() { 
    Map<String,List<Integer>> outputMap = new HashMap<>(); 
    SharedPreferences pSharedPref =    MainActivity.getContextofApplication().getSharedPreferences(NETWORK_PREF, Activity.MODE_PRIVATE); 
    try{ 
     if (pSharedPref != null){ 
      String jsonString = pSharedPref.getString(RSSI_MAP, (new JSONObject()).toString()); 
      JSONObject jsonObject = new JSONObject(jsonString); 
      Iterator<String> keysItr = jsonObject.keys(); 
      while(keysItr.hasNext()) { 
       String key = keysItr.next(); 
       List<Integer> value = (List<Integer>) jsonObject.get(key); 
       outputMap.put(key, value); 
      } 
     } 
    }catch(Exception e){ 
     e.printStackTrace(); 
    } 
    return outputMap; 
} 

public void saveRSSI() { 
    SharedPreferences pref = MainActivity.getContextofApplication().getSharedPreferences(NETWORK_PREF,Activity.MODE_PRIVATE); 
    JSONObject jsonObject = new JSONObject(this.RSSImap); 
    String jsonString = jsonObject.toString(); 
    SharedPreferences.Editor editor = pref.edit(); 
    editor.putString(RSSI_MAP, jsonString); 
    editor.commit(); 
} 

答えて

2

例外は問題が何であるか、あなたはJSONからリストを取得する必要があなたを語っています。このサイクルであなたのサイクルを交換してみてください:

  while(keysItr.hasNext()) { 
       String key = keysItr.next(); 
       JSONArray jlist = jsonObject.getJSONArray(key); 
       List<Integer> list = new ArrayList<>(); 
       for(int i=0; i < jlist.length(); i++){ 
        list.add(jlist.getInt(i)); 
       } 
       outputMap.put(key, list); 
      } 
+0

ありがとうございます、私はあなたのソリューションを試してみて、それは完全に動作します。 –

関連する問題