2012-06-26 5 views
0

Android에 데이터를 저장하려고합니다. SharedPreferences을 사용하고 있습니다. 그리고 내가 사용하여 이러한 데이터를 검색하고 있습니다 :Android : SharedPreferences에서 검색된 데이터 정렬

SharedPreferences myPrefs = this.getSharedPreferences("myPrefs", MODE_WORLD_READABLE); 
      Map<String, ?> keys = myPrefs.getAll(); 
      for (Map.Entry<String, ?> entry : keys.entrySet()) { 
       Log.i("map values", entry.getKey()); 
          //some code 
} 

편집 :

그러나이 삽입 된로 검색된 데이터가 동일한 순서가 아니다. 같은 순서를 얻는 방법?

+2

당신은 작성하여지도를 정렬 할 수 있습니다 자신의 비교 자. 확인 [여기] (http://stackoverflow.com/questions/109383/how-to-sort-a-mapkey-value-on-the-values-in-java) –

+2

아. 그들이 속한 것과 같은 순서를 원하십니까? 그것은 쉬운 방법으로는 불가능합니다. 키와 값이 파일에서로드 될 때 정보가 손실됩니다. – Jens

+0

고맙습니다. 그것은 내가 할 방법을 찾아야한다는 것을 의미합니다 .... – user1471575

답변

3

MapSortedMap의 구현으로 복사하십시오. TreeMap. 이처럼

( 정렬) :

SharedPreferences myPrefs = this.getSharedPreferences("myPrefs", MODE_WORLD_READABLE); 
TreeMap<String, ?> keys = new TreeMap<String, Object>(myPrefs.getAll()); 
for (Map.Entry<String, ?> entry : keys.entrySet()) { 
    Log.i("map values", entry.getKey()); 
    //some code 
} 

& 어떤 키 - 값 쌍에게 서로 다른 키에 (지도 쉽게 중복 값을 허용하기 때문에 매핑을 잃지 값을 기준으로 정렬) 먼저 List으로 변환하고 정렬해야합니다.

List<Pair<Object, String>> sortedByValue = new LinkedList<Pair<Object,String>>(); 
    for (Map.Entry<String, ?> entry : keys.entrySet()) { 
     Pair<Object, String> e = new Pair<Object, String>(entry.getValue(), entry.getKey()); 
     sortedByValue.add(e); 
    } 

    // Pair doesn't have a comparator, so you're going to need to write one. 
    Collections.sort(sortedByValue, new Comparator<Pair<Object, String>>() { 
     public int compare(Pair<Object, String> lhs, Pair<Object, String> rhs) { 
      // This is a naive and shitty comparator, but it works for 
      // arbitrary objects. Sort of. Tweak depending on the order you need. 
      String sls = String.valueOf(lhs.first); 
      String srs = String.valueOf(rhs.first); 
      int res = sls.compareTo(srs); 
      // Sort on value first, key second 
      return res == 0 ? lhs.second.compareTo(rhs.second) : res; 
     } 
    }); 

    for (Pair<Object, String> pair : sortedByValue) { 
     Log.i("map values", pair.first + "/" + pair.second); 
    } 
+0

작동하지 않았습니다. – user1471575

+0

어떻게 데이터를 값순으로 정렬 할 수 있습니까? – user1471575

0

... 같은 ... 먼저 저장 설정 순서로

public static void saveSettings(final Editor editor, final String [] order) { 
    final String csl = toString(order);//comma separated 
    editor.putString("insert_order", csl); 
    for (int i = 0; i < values.length; i++) { 
     editor.putString(values[i], your_value[i]); 
    } 
} 

을 속성을 추가 이제 그들을로드 :

public static List<String> loadSetting(final SharedPreferences preferences) { 
    final List<String> inOrder = new ArrayList<>(); 
    final String[] ordering = preferences.getString("insert_order", "").split(","); 
    for (final String item : ordering) { 
     final String value = (String) preferences.getString(item, ""); 
     inOrder.add(value); 
    } 
    return inOrder; 
} 
관련 문제