2012-11-06 1 views
0

У меня проблема с сортировкой списка песен в приложении для музыкального проигрывателя. Вот код:Ошибка сортировки arraylist?

public ArrayList<HashMap<String, String>> songsList = new ArrayList<HashMap<String, String>>(); 

@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.playlist); 

    ArrayList<HashMap<String, String>> songsListData = new ArrayList<HashMap<String, String>>(); 

    SongsManager plm = new SongsManager(); 
    // get all songs from sdcard 
    this.songsList = plm.getPlayList(); 

    // looping through playlist 
    for (int i = 0; i < songsList.size(); i++) { 
     // creating new HashMap 
     HashMap<String, String> song = songsList.get(i); 

     // adding HashList to ArrayList 
     songsListData.add(song); 
     Collections.sort(songsListData); << The problem is in this line 
    } 

. 
. 
. 
. 
. 

} 

Он выдает эту ошибку: «Bound несоответствия:. Обобщенный метод Sort (список) коллекций типа не применяются для аргументов (ArrayList>) выведенный типа HashMap не действительный заменитель ограниченного параметра> «

Может ли кто-нибудь помочь мне исправить это? Заранее спасибо

EDIT: Так на основе Paresh я изменил его:

Collections.sort(songsListData, new myOwnComparator()); 

public class myOwnComparator implements Comparator<HashMap<String, String>> { 

     public myOwnComparator() { 
      // TODO Auto-generated constructor stub 
     } 


     public int compare(HashMap<String, String> o1, HashMap<String, String> o2) { 
      return o1.get("KeyName").compareTo(o2.get("KeyName")); 
     } 
} 

Но она по-прежнему не работает. Вот лог кошки:

11-12 12: 49: 09,450 D/dalvikvm (6584): GC_EXTERNAL_ALLOC освободил 151K, 52% свободного 2662K/5447K, внешний 903K/1034K, остановился 23МС 11-12 12:49 : 09.505: D/AndroidRuntime (6584): выключение VM 11-12 12: 49: 09.510: W/dalvikvm (6584): threadid = 1: выход из потока с неперехваченным исключением (группа = 0x4001e578) 11-12 12: 49: 09.515: E/AndroidRuntime (6584): FATAL EXCEPTION: main 11-12 12: 49: 09.515: E/AndroidRuntime (6584): java.lang.RuntimeException: не удается запустить Activity ComponentInfo {com.example.musicshare/com.example.musicshare.PlayListActivity}: java.lang.NullPointerException 11-12 12: 49: 09.515: E/AndroidRuntime (6584): at android.app.ActivityThread.performLaunchActivity (ActivityThread.java:1651) 11-12 12: 49: 09.515: E/AndroidRuntime (6584): at android.app.ActivityThread.handleLaunchActivity (ActivityThread.java:1667) 11-12 12: 49: 09.515: E/AndroidRuntime (6584): at android.app.ActivityThread.access $ 1500 (ActivityThread.java:117) 11-12 12: 49: 09.515: E/AndroidRuntime (6584): at android.app.ActivityThread $ H.handleMessage (ActivityThread.java:935) 11-12 12: 49: 09.515: E/AndroidRuntime (6584): at android.os.Handler.dispatchMessage (Handler.java:99) 11-12 12: 49: 09.515: E/AndroidRuntime (6584): у android .os.Looper.loop (Looper.java:123) 11-12 12: 49: 09.515: E/AndroidRuntime (6584): at android.app.ActivityThread.main (ActivityThread.java:3691) 11-12 12 : 49: 09.515: E/AndroidRuntime (6584): at java.lang.reflect.Method.invokeNative (собственный метод) 11-12 12: 49: 09.515: E/AndroidRuntime (6584): at java.lang.reflect.Method.invoke (Method.java:507) 11-12 12: 49: 09.515: E/AndroidRuntime (6584): at com.android. internal.os.ZygoteInit $ MethodAndArgsCaller.run (ZygoteInit.java:847) 11-12 12: 49: 09.515: E/AndroidRuntime (6584): at com.android.internal.os.ZygoteInit.main (ZygoteInit.java: 605) 11-12 12: 49: 09.515: E/AndroidRuntime (6584): at dalvik.system.NativeStart.main (родной метод) 11-12 12: 49: 09.515: E/AndroidRuntime (6584): вызвано : java.lang.NullPointerException 11-12 12: 49: 09.515: E/AndroidRuntime (6584): at com.example.musicshare.PlayListActivity $ myOwnComparator.compare (PlayListActivity.java:103) 11-12 12:49: 09.515: E/AndroidRuntime (6584): at com.example.musicshare.PlayListActivity $ myOwnComparator.compare (PlayListActivity.java:1) 11-12 12: 49: 09.515: E/AndroidRuntime (6584): at java.util.TimSort.countRunAndMakeAscending (TimSort.java:320) 11-12 12: 49: 09.515: E/AndroidRuntime (6584): at java.util.TimSort.sort (TimSort.java:199) 11-12 12: 49: 09.515: E/AndroidRuntime (6584): at java.util.TimSort.sort (TimSort.java:169) 11-12 12: 49: 09.515: E/AndroidRuntime (6584): at java.util.Arrays.sort (Arrays.java:2090) 11-12 12: 49: 09.515: E/AndroidRuntime (6584): у java.util. Collections.sort (Collections.java:1965) 11-12 12: 49: 09.515: E/AndroidRuntime (6584): at com.example.musicshare.PlayListActivity.onCreate (PlayListActivity.java:61) 11-12 12: 49: 09.515: E/AndroidRuntime (6584): at android.app.Instrumentation.callActivityOnCreate (Instrumentation.java:1047) 11-12 12:49: 09.515: E/AndroidRuntime (6584): at android.app.ActivityThread.performLaunchActivity (ActivityThread.java:1615) 11-12 12: 49: 09.515: E/AndroidRuntime (6584): ... 11 еще 11-12 12: 50: 21.790: D/dalvikvm (6717): GC_EXTERNAL_ALLOC освобожден 152K, 52% бесплатно 2663K/5447K, внешний 1015K/1034K, приостановлен 52 мс 11-12 12: 50: 21.840: D/AndroidRuntime (6717): выключение VM 11-12 12: 50: 21.850: W/dalvikvm (6717): threadid = 1: выход с отключенным исключением (группа = 0x4001e578) 11-12 12: 50: 21.855: E/AndroidRuntime (6717): FATAL ИСКЛЮЧЕНИЕ: main 11-12 12: 50: 21.855: E/Android Runtime (6717): java.lang.RuntimeException: не удается запустить активность ComponentInfo {com.example.musicshare/com.example.musicshare.PlayListActivity}: java.lang.NullPointerException 11-12 12: 50: 21.855: E/AndroidRuntime (6717): at android.app.ActivityThread.performLaunchActivity (ActivityThread.java:1651) 11-12 12: 50: 21.855: E/AndroidRuntime (6717): at android.app.ActivityThread.handleLaunchActivity (ActivityThread.java:1667) 11-12 12: 50: 21.855: E/AndroidRuntime (6717): at android.app.ActivityThread.access $ 1500 (ActivityThread.java:117) 11-12 12: 50: 21.855: E/AndroidRuntime (6717) : at android.app.ActivityThread $ H.handleMessage (ActivityThread.java:935) 11-12 12: 50: 21.855: E/AndroidRuntime (6717): at android.os.Handler.dispatchMessage (Handler.java:99) 11-12 12: 50: 21.855: E/AndroidRuntime (6717): на android.o s.Looper.loop (Looper.java:123) 11-12 12: 50: 21.855: E/AndroidRuntime (6717): at android.app.ActivityThread.main (ActivityThread.java:3691) 11-12 12: 50: 21.855: E/AndroidRuntime (6717): at java.lang.reflect.Method.invokeNative (собственный метод) 11-12 12: 50: 21.855: E/AndroidRuntime (6717): at java.lang.reflect.Method .invoke (Method.java:507) 11-12 12: 50: 21.855: E/AndroidRuntime (6717): at com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run (ZygoteInit.java:847) 11- 12 12: 50: 21.855: E/AndroidRuntime (6717): at com.android.internal.os.ZygoteInit.main (ZygoteInit.java:605) 11-12 12: 50: 21.855: E/AndroidRuntime (6717): в dalvik.system.NativeStart.main (родной метод) 11-12 12: 50: 21.855: E/AndroidRuntime (6717): вызвано: java.lang.NullPointerException 11-12 12: 50: 21.855: E/AndroidRuntime (6717): at com.example.musicshare.PlayListActivity $ myOwnComparator.compare (PlayListActivity.java:103) 11-12 12: 50: 21.855: E/AndroidRuntime (6717): at com.example.musicshare.PlayListActivity $ myOwnComparator.compare (PlayListActivity.java:1) 11-12 12: 50: 21.855: E/AndroidRuntime (6717): at java.util.TimSort.countRunAndMakeAscending (TimSort. java: 320) 11-12 12: 50: 21.855: E/AndroidRuntime (6717): at java.util.TimSort.sort (TimSort.java:199) 11-12 12: 50: 21.855: E/AndroidRuntime (6717): at java.util.TimSort.sort (TimSort.java:169) 11-12 12: 50: 21.855: E/AndroidRuntime (6717): at java.util.Arrays.sort (Arrays.java:2090) 11-12 12: 50: 21.855: E/AndroidRuntime (6717): at java.util.Collections.sort (Collections.java:1965) 11-12 12: 50: 21.855: E/AndroidRuntime (6717): at com.example.musicshare.PlayListActivity.onCreate (PlayListActivity.java:61) 11-12 12: 50: 21.855: E/AndroidRuntime (6717): at android.app.Instrumentation.callActivityOnCreate (Instrumentation.java:1047) 11-12 12: 50: 21.855: E/AndroidRuntime (6717): at android.app.ActivityThread.performLaunchActivity (ActivityThread.java:1615) 11-12 12: 50: 21.855: E/AndroidRuntime (6717): ...11 более

+0

магазин значение HashMap (не весь HashMap) в списке и сортировать список. –

+0

Как? Извините, я еще не очень хорошо программировал –

+0

Сначала сохраните его в списке 'List stringings = song.values ​​()', а затем отсортируйте значения 'Collections.sort (строки)' –

ответ

3

Как вы испытываете ArrayList<HashMap<String, String>>, вам нужно создать пользовательский компаратор же как:

public class myOwnComparator implements Comparator<HashMap<String, String>> { 

    public myOwnComparator() { 
     // TODO Auto-generated constructor stub 
    } 


    public int compare(HashMap<String, String> o1, HashMap<String, String> o2) { 
     return o1.get("KeyName").compareTo(o2.get("KeyName")); 
    } 
} 

А затем применить этот компаратор к вашим данным:

Collections.sort(songsListData, new myOwnComparator()); 
+0

Что вы подразумеваете под компаратором? –

+0

@AnthonyPangestu google it. –

+0

Привет @Paresh Я пробовал, но это все еще ошибка. Изменили вопрос. –