2016-08-15 11 views
13

Próbuję posortować kod ArrayList w języku Java w aplikacji na Androida, ale otrzymuję ten dziwny wyjątek.java.lang.NoSuchMethodError: Brak sortowania metod interfejsu (wyjątek Ljava/util/Komparator;) w sortowaniu listy tablicowej Android

Kod:

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

Wyjątek:

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) 

Odpowiedz

35

ArrayList#sort() został dodany na poziomie interfejsu API 24, a środowiska wykonawcze poniżej poziomu interfejsu API 24 nie mają tej metody. Wygląda na to, że twój numer compileSdkVersion ma numer 24, więc najpierw otrzymałeś kod do kompilacji.

Użyj zamiast tego .

+0

Dziękuję laalto, masz rację –

+1

mmmm, użyłem 'Collection.sort' dawno temu, ale dziś właśnie znalazłem tę metodę w zakończeniu kodu w Androidzie, ale prawdopodobnie była to pułapka :). Dzięki –

3

Co jeśli spróbujesz

Collections.sort(eventsList, new Comparator... 

O ile wiem ArrayList nie ma sort metody.

+0

Naprawdę próbowałem i działa. Ale pytanie brzmi: dlaczego inne rozwiązanie się zawiesza? –

3

Lista nie posiada swoją własną metodę sortowania, musisz zadzwonić

Collections.sort() 

jako sposobu na liście. Jeśli to zwróci ClassCastError, oznacza to, że lista zawiera elementy, które nie mogą być sortowane. Myślę, że powinno to naprawić, ale bez pełnego kodu, trudno to sprawdzić.

+0

Czy arrayList nie ma własnej metody sortowania? Więc to, co jest tym http://docs.oracle.com/javase/8/docs/api/java/util/List.html#sort-java.util.Comparator- –

+0

, jest dodawane w java 8 i to nie jest z powrotem przeniesione do wszystkich wersji, więc może to być przyczyną Twojego błędu. – androidnoobdev

0

Metoda ArrayList.sort() została dodana później, dlatego jej nie działa. Możemy zaktualizować wersję java (1.8) lub możemy użyć poniższej metody.

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