2012-11-06 86 views
0

我在排序我的音乐播放器应用程序中的歌曲列表时出现问题。下面的代码:Sorting 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 
    } 

. 
. 
. 
. 
. 

} 

它给了这个错误: “绑定不匹配:类型类别的通用方法排序(名单)不适用的参数(ArrayList的>)推断出的类型HashMap的不是有效的替代参数>“

任何人都可以帮我解决这个问题吗?在此先感谢

编辑: 因此,基于帕雷什我把它改为:

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:线程退出时未捕获的异常(组= 0x4001e578) 11-12 12: 49:09.515:E/AndroidRuntime(6584):致命例外:主 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):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):在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):在java.lang.reflect.Method.invokeNative(Native Method) 11-12 12: 49:09.515:E/AndroidRuntime(6584):在java.lang.reflect.Method.invoke(Method.java:507) 11-12 12:49:09.515:E/AndroidRuntime(6584):at com.android。 (ZygoteInit.java:847) 11-12 12:49:09.515:E/AndroidRuntime(6584):at com.android.internal.os.ZygoteInit.main 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):由: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):在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):在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):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):在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):致命EXCEPTION:main 11-12 12:50:21.855:E/Android运行时(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):at 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):在java.lang.reflect.Method.invokeNative(本机方法) 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):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):在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):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

首先将其存储在一个列表'列表串= 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谷歌它。 –

+0

嗨@Paresh我试过了,但它仍然是错误的。编辑了这个问题。 –