2012-10-10 3 views
-2

Android 안드로 코딩을 처음 사용했습니다. 나는 프로젝트에 던져졌고 아래의 코드는 작동하지만 실제로 이해하지는 못한다. 누군가 각 단계에서 무엇을하고 있는지 코드에 댓글을 달겠습니까? 공유 환경 설정 파일에있는 모든 키 - 값 쌍을 로깅이 Android/Java 코드는 어떤 기능을 수행합니까?

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

     } 


     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) { 

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


     Collection<?> stringArrayList = keys.values(); 
     final CharSequence[] prefsCharSequence = stringArrayList.toArray(new CharSequence[stringArrayList.size()]); 
+0

나중에 디버거의 코드를 단계별로 실행하여 수행중인 작업을 확인해야합니다. 그런 다음 질문이있는 경우 SO에 게시하십시오. 당신은 실제로 특정 질문을하지 않았다 – toadzky

+0

이것은 무엇을위한 것이 아닙니다. 코드가 무엇인지 이해하지 못한다면 코드를 사용해서는 안됩니다. 당신이 누구 였는지 물어보십시오. (그리고 그물에서 가져온 코드는 설명이 있어야합니다.) – Eric

답변

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

    } 

.

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

쌍의 목록을 정렬 할

Collections.sort(sortedByValue, new Comparator<Pair<Object, String>>() { 
     public int compare(Pair<Object, String> lhs, Pair<Object, String> rhs) { 

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

정렬 된 환경 설정을 인쇄하십시오.

Collection<?> stringArrayList = keys.values(); 
    final CharSequence[] prefsCharSequence = stringArrayList.toArray(new CharSequence[stringArrayList.size()]); 

SharedPreferences 파일의 키를 Collection으로 변환 한 다음 String 목록으로 변환합니다.

+0

감사합니다. 대단히 감사합니다. –

관련 문제