2016-04-25 6 views
0

Ich triyng eine HashMap in SharedPreferences zu speichern, aber ich bekomme diese Fehlermeldung, wenn ich die Karte zu laden:speichern Hashzuordnung Gemeinsam genutzte Einstellungen

java.lang.ClassCastException: org.json.JSONArray kann nicht auf Java gegossen werden. util.List

Ich habe den Code angepasst, den ich online gefunden habe, aber ich verstehe nicht, warum ich diesen Fehler bekomme. Hier

ist der Code:

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

Antwort

2

Die Exception sagt Ihnen, was das Problem ist, müssen Sie die Liste von JSON zu bekommen. Versuchen Sie, Ihren while Zyklus mit diesem:

  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

danke, ich habe versucht Ihre Lösung und es funktioniert perfekt. –