web-dev-qa-db-ja.com

java.lang.NoSuchMethodError:arraylistのソートでインターフェイスメソッドsort(Ljava / util / Comparator;)例外がありませんandroid

JavaアプリのAndroidでArrayListをソートしようとしていますが、この奇妙な例外が発生しています。

コード:

eventsList.sort(new Comparator<Event>() {
        @Override
        public int compare(Event event, Event t1) {
            return event.getEventStartDate().compareTo(t1.getEventStartDate());
        }
    });

例外:

Java.lang.NoSuchMethodError: No interface method sort(Ljava/util/Comparator;)V in class Ljava/util/List; or its super classes (declaration of 'Java.util.List' appears in /system/framework/core-libart.jar)
22
Hossam Ghareeb

ArrayList#sort() はAPIレベル24で追加され、APIレベル24未満のランタイムにはそのメソッドがありません。あなたのcompileSdkVersionは24にあるので、最初にコンパイルするコードを取得しました。

代わりにCollections.sort(list, comparator)を使用してください。

49
laalto

Zxing?

com.google.zxing.qrcode.detector.FinderPatternFinder.selectBestPatternsのZxingコアライブラリでこのエラーが発生した場合は、Zxingを3.3.x(現在は3.3.3)にダウングレードすることで解決できます。

詳細は https://github.com/zxing/zxing/issues/117 を参照してください。

9
tobltobs

あなたがしようとしたら

Collections.sort(eventsList, new Comparator...

私の知る限り、ArrayListにはsortメソッドがありません。

4
mic4ael

リストには独自の並べ替えメソッドがないため、呼び出す必要があります

Collections.sort() 

リストのメソッドとして。これがClassCastErrorを返す場合は、リストにソートできないアイテムがあることを意味します。これで修正できると思いますが、完全なコードがないと確認するのが困難です。

3
Matt

ArrayList.sort()メソッドが後で追加されたため、機能しません。 Javaバージョン(1.8)を更新するか、以下の方法を使用できます。

Collections.sort(eventList, new Comparator<Event>() {
        @Override
        public int compare(Event event, Event t1) {
            return event.getEventStartDate().compareTo(t1.getEventStartDate());
        }
});
1
Ravindra