2016-08-27 10 views
-3

私はこのコードを持っています。 ArrayListをクリアすると、HashMapの値もクリアされます。どうすればデータを保存できますか?私はcitiesList.clear();を使用する場合ハッシュマップのクリア値

public class Stations extends AppCompatActivity { 
    public static Map<String, ArrayList<String>> cities = new HashMap<>(); 

    ... 

    public void parseFrom() { 
     cities.clear(); 
     ArrayList<String> citiesList = new ArrayList<>(); 
     try { 
      JSONObject jObject = new JSONObject(loadJSON()); 
      JSONArray jArray = jObject.getJSONArray("citiesFrom"); 
      String countryTitle = null; 

      for (int i = 0; i < jArray.length(); i++) { 
       JSONObject jsonObject = jArray.getJSONObject(i); 
       if ((countryTitle != null) && (!countryTitle.equals(jsonObject.getString("countryTitle")))) { 
        cities.put(countryTitle, citiesList); 
        citiesList.clear(); 
       } 
       countryTitle = jsonObject.getString("countryTitle"); 
       citiesList.add(jsonObject.getString("cityTitle")); 
      } 
     } catch (JSONException e) { 
      e.printStackTrace(); 
     } 
    } 

すべての値がクリアされますが、キーはまだ「生きています」。

答えて

1

これはメモリ内で同じ参照があるためです。あなたが本当にしたいことはハッシュマップから削除する場合、あなただけの都市の配列をクリアするのではなく、cities.remove(countryTitle)を呼び出す必要があります、

cities.put(countryTitle, new ArrayList<String>(citiesList)); 

しかし:

はこれをやってみてください。

関連する問題