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
    }

.
.
.
.
.

}

次のエラーが表示されます。

誰でもこれを修正するのを手伝ってもらえますか? 前もって感謝します

編集:だから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例外: main 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): 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): at 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: キャッチされない例外で終了するスレッド (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: アクティビティ 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(ネイティブ メソッド) 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(ネイティブ メソッド) 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 に答える