0

I'm having problem sorting the song list on my music player application. Here's the code:

 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
    }

.
.
.
.
.

}

It gives out this error: "Bound mismatch: The generic method sort(List) of type Collections is not applicable for the arguments (ArrayList>). The inferred type HashMap is not a valid substitute for the bounded parameter >"

Can anyone help me fix this? Thanks in advance

EDIT: So based on Paresh I've changed it to:

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

But it still doesnt work. Here's the log cat:

11-12 12:49:09.450: D/dalvikvm(6584): GC_EXTERNAL_ALLOC freed 151K, 52% free 2662K/5447K, external 903K/1034K, paused 23ms 11-12 12:49:09.505: D/AndroidRuntime(6584): Shutting down VM 11-12 12:49:09.510: W/dalvikvm(6584): threadid=1: thread exiting with uncaught exception (group=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: Unable to start 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): at 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(Native Method) 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(Native Method) 11-12 12:49:09.515: E/AndroidRuntime(6584): Caused by: 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): at 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 more 11-12 12:50:21.790: D/dalvikvm(6717): GC_EXTERNAL_ALLOC freed 152K, 52% free 2663K/5447K, external 1015K/1034K, paused 52ms 11-12 12:50:21.840: D/AndroidRuntime(6717): Shutting down VM 11-12 12:50:21.850: W/dalvikvm(6717): threadid=1: thread exiting with uncaught exception (group=0x4001e578) 11-12 12:50:21.855: E/AndroidRuntime(6717): FATAL EXCEPTION: main 11-12 12:50:21.855: E/AndroidRuntime(6717): java.lang.RuntimeException: Unable to start activity 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): at android.os.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(Native Method) 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): at dalvik.system.NativeStart.main(Native Method) 11-12 12:50:21.855: E/AndroidRuntime(6717): Caused by: 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 more

9
  • The problem is the sorting of the hashmap. This question stackoverflow.com/questions/780541/how-to-sort-hash-map may help you Commented Nov 6, 2012 at 6:23
  • Store the HashMap values(not the whole HashMap) in a list and than sort the list. Commented Nov 6, 2012 at 6:26
  • How to? Sorry I'm not very good in programming yet Commented Nov 6, 2012 at 6:37
  • First store it in a list List<String> strings = song.values() and then sort the values Collections.sort(strings) Commented Nov 6, 2012 at 6:39
  • Shouldn't the one sorted be songsListData instead of song? But I've tried changing it into songsListData and it doesnt work (cannot be resolved) Commented Nov 6, 2012 at 6:54

1 Answer 1

3

As you are having ArrayList<HashMap<String, String>>, you need to create custom comparator same like:

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

And then apply this comparator to your data:

Collections.sort(songsListData, new myOwnComparator());
Sign up to request clarification or add additional context in comments.

2 Comments

What do you mean by comparator?
Hi @Paresh I've tried it but it still is error. Have edited the question.

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.