【问题标题】:java.lang.NoSuchMethodError: No interface method sort(Ljava/util/Comparator;) exception in sorting arraylist androidjava.lang.NoSuchMethodError:在排序arraylist android中没有接口方法排序(Ljava/util/Comparator;)异常
【发布时间】:2016-12-21 10:20:20
【问题描述】:

我正在尝试在 Android 应用程序中用 Java 对 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)

【问题讨论】:

    标签: java android arraylist


    【解决方案1】:

    ArrayList#sort() 是在 API 级别 24 中添加的,API 级别 24 以下的运行时没有该方法。看起来您的 compileSdkVersion 是 24,所以您首先获得了要编译的代码。

    请改用Collections.sort(list, comparator)

    【讨论】:

    • mmmm,很久以前我曾经使用Collection.sort,但今天我刚刚在Android Studio的代码完成中发现了这种方法,但很可能是一个陷阱:)。谢谢
    【解决方案2】:

    Zxing?

    如果您在 com.google.zxing.qrcode.detector.FinderPatternFinder.selectBestPatterns 的 Zxing 核心库中遇到此错误,您可以通过将 Zxing 降级到 3.3.x(当前为 3.3.3)来解决它。

    详情请见https://github.com/zxing/zxing/issues/1170

    【讨论】:

      【解决方案3】:

      Zxing无需降级

      只需在 App 级别 gradle

      中添加以下内容
      android{
      ....
          compileOptions {
              coreLibraryDesugaringEnabled true
              sourceCompatibility = '1.8'
              targetCompatibility = '1.8'
          }
      
      }
      

      dependencies {
          ......
          coreLibraryDesugaring 'com.android.tools:desugar_jdk_libs:1.1.5'
      }
      

      【讨论】:

      • 我找到了this same answer elsewhere,但这是 2021 年的正确做法,所以我投了赞成票。
      • 这个解决方案也对我有用,因为我不想降级
      【解决方案4】:

      如果你尝试怎么办

      Collections.sort(eventsList, new Comparator...
      

      据我所知ArrayList 没有sort 方法。

      【讨论】:

        【解决方案5】:

        列表没有自己的排序方法,你需要调用

        Collections.sort() 
        

        作为方法就行了。如果这返回一个 ClassCastError,则意味着该列表包含不可排序的项目。我认为这应该可以解决它,但是没有完整的代码,很难检查。

        【讨论】:

          【解决方案6】:

          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());
                  }
          });
          

          【讨论】:

            猜你喜欢
            • 2019-02-21
            • 1970-01-01
            • 2020-02-12
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2017-12-24
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多