0

我在音乐播放器应用程序上对歌曲列表进行排序时遇到问题。这是代码:

 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
    }

.
.
.
.
.

}

它给出了这个错误:“绑定不匹配:集合类型的泛型方法 sort(List) 不适用于参数 (ArrayList>)。推断的类型 HashMap 不是有界参数的有效替代 >”

谁能帮我解决这个问题?提前致谢

编辑:所以基于 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, 暂停 23ms 11-12 12:49:09.505: D/AndroidRuntime(6584):关闭 VM 11-12 12:49:09.510: W/dalvikvm(6584): threadid=1: 线程退出未捕获异常 (group=0x4001e578) 11-12 12:49:09.515: E/AndroidRuntime(6584): FATAL例外:主 11-12 12:49:09.515:E/AndroidRuntime(6584):java.lang.RuntimeException:无法启动活动 ComponentInfo{com.example.musicshare/com.example.musicshare.PlayListActivity}:java.lang。 NullPointerException 11-12 12:49:09.515: E/AndroidRuntime(6584): 在 android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1651) 11-12 12:49:09.515: E/AndroidRuntime(6584): 在 android .app.ActivityThread.handleLaunchActivity(ActivityThread.java:1667) 11-12 12:49:09.515: E/AndroidRuntime(6584):在 android.app.ActivityThread.access$1500(ActivityThread.java:117) 11-12 12:49:09.515: E/AndroidRuntime(6584): 在 android.app.ActivityThread$H.handleMessage(ActivityThread.java:935) 11 -12 12:49:09.515: E/AndroidRuntime(6584): 在 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): 在 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): 在 com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:847) 11-12 12:49:09.515 :E/AndroidRuntime(6584): 在 com.android.internal.os.ZygoteInit.main(ZygoteInit.java:605) 11-12 12:49:09.515: E/AndroidRuntime(6584): 在 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):在 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): 在 java.util.TimSort.countRunAndMakeAscending(TimSort.java:320) 11-12 12:49:09.515: E/AndroidRuntime(6584): 在 java.util。 TimSort.sort(TimSort.java:199) 11-12 12:49:09.515: E/AndroidRuntime(6584): 在 java.util.TimSort.sort(TimSort.java:169) 11-12 12:49:09.515: E/AndroidRuntime(6584): 在 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): 在 com.example.musicshare.PlayListActivity.onCreate(PlayListActivity.java:61) 11-12 12:49:09.515: E/AndroidRuntime(6584): 在 android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047) 11-12 12:49:09.515: E/AndroidRuntime(6584): 在 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,暂停 52ms 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):致命异常:主要 11-12 12:50:21.855:E/AndroidRuntime(6717): java.lang.RuntimeException:无法启动活动 ComponentInfo{com.example.musicshare/com.example.musicshare.PlayListActivity}:java.lang.NullPointerException 11-12 12:50:21.855:E/AndroidRuntime(6717):在 android .app.ActivityThread.performLaunchActivity(ActivityThread.java:1651) 11-12 12:50:21.855: E/AndroidRuntime(6717): 在 android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1667) 11-12 12:50 :21.855: E/AndroidRuntime(6717): 在 android.app.ActivityThread.access$1500(ActivityThread.java:117) 11-12 12:50:21.855: E/AndroidRuntime(6717): 在 android.app.ActivityThread$H .handleMessage(ActivityThread.java:935) 11-12 12:50:21.855:E/AndroidRuntime(6717): 在 android.os.Handler.dispatchMessage(Handler.java:99) 11-12 12:50:21.855: E/AndroidRuntime(6717): 在 android.os.Looper.loop(Looper.java :123) 11-12 12:50:21.855: E/AndroidRuntime(6717): 在 android.app.ActivityThread.main(ActivityThread.java:3691) 11-12 12:50:21.855: E/AndroidRuntime(6717):在 java.lang.reflect.Method.invokeNative(Native Method) 11-12 12:50:21.855: E/AndroidRuntime(6717): 在 java.lang.reflect.Method.invoke(Method.java:507) 11-12 12:50:21.855: E/AndroidRuntime(6717): 在 com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:847) 11-12 12:50:21.855: E/AndroidRuntime(6717):在 com.android.internal.os.ZygoteInit.main(ZygoteInit.java:605) 11-12 12:50:21.855: E/AndroidRuntime(6717): 在 dalvik.system.NativeStart.main(Native Method) 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): 在 com.example.musicshare.PlayListActivity$myOwnComparator.compare(PlayListActivity.java:1) 11-12 12:50:21.855: E/AndroidRuntime(6717) : 在 java.util.TimSort.countRunAndMakeAscending(TimSort.java:320) 11-12 12:50:21.855: E/AndroidRuntime(6717): 在 java.util.TimSort.sort(TimSort.java:199) 11-12 12:50:21.855: E/AndroidRuntime(6717): 在 java.util.TimSort.sort(TimSort.java:169) 11-12 12:50:21.855: E/AndroidRuntime(6717): 在 java.util.Arrays .sort(Arrays.java:2090) 11-12 12:50:21.855: E/AndroidRuntime(6717): 在 java.util.Collections.sort(Collections.java:1965) 11-12 12:50:21.855:E/AndroidRuntime(6717): 在 com.example.musicshare.PlayListActivity.onCreate(PlayListActivity.java:61) 11-12 12:50:21.855: E/AndroidRuntime(6717): 在 android.app.Instrumentation.callActivityOnCreate(Instrumentation .java:1047) 11-12 12:50:21.855: E/AndroidRuntime(6717): 在 android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1615) 11-12 12:50:21.855: E/AndroidRuntime(6717) ): ... 11 更多

4

1 回答 1

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());
于 2012-11-06T06:59:09.500 回答