【问题标题】:java.lang.NoClassDefFoundError: Failed resolution of: Ljava/time/LocalDate; errorjava.lang.NoClassDefFoundError:解析失败:Ljava/time/LocalDate;错误
【发布时间】:2018-09-26 05:14:08
【问题描述】:

我尝试了所有方法,但错误没有得到解决

这是我的代码:

public String[] getWeekDays() {

    LocalDate today = LocalDate.now();
    LocalDate monday = today;
    LocalDate tue = today;
    LocalDate wed = today;
    LocalDate thur = today;
    LocalDate fri = today;
    LocalDate sat = today;
    LocalDate sunday = today;
    while (sunday.getDayOfWeek() != DayOfWeek.SUNDAY){
        sunday = sunday.minusDays(1);
     }
     while (monday.getDayOfWeek() != DayOfWeek.MONDAY){
        monday = monday.minusDays(1);
     }
     while (tue.getDayOfWeek() != DayOfWeek.TUESDAY){
        tue = tue.plusDays(1);
     }
     while (wed.getDayOfWeek() != DayOfWeek.WEDNESDAY){
        wed = wed.plusDays(1);
     }
     while (thur.getDayOfWeek() != DayOfWeek.THURSDAY){
        thur = thur.plusDays(1);
     }
     while (fri.getDayOfWeek() != DayOfWeek.FRIDAY){
        fri = fri.plusDays(1);
     }
     while (sat.getDayOfWeek() != DayOfWeek.SATURDAY){
        sat = sat.plusDays(1);
     }

     String[] days = {String.valueOf(sunday),String.valueOf(monday), String.valueOf(tue), String.valueOf(wed),
                String.valueOf(thur), String.valueOf(fri), String.valueOf(sat)};
    return days;
}

我已经编写了获取一周日期的代码。当我运行此代码时,我在 LocalDate.now(); 处收到错误。错误是“java.lang.NoClassDefFoundError:解析失败:Ljava/time/LocalDate;”。 我在网上搜索过。有人说它需要 API 级别最低 27。我已经厌倦了 API 27 级别,但错误没有得到解决。我的目标设备更多是 API 26,我需要在这个 API 级别上运行。并且还尝试添加“compile”java.time:LocalTime:1.8“”。这个也行不通。 请帮帮我...

【问题讨论】:

    标签: java android java-time


    【解决方案1】:

    NoClassDefFoundError-如果 Java 虚拟机或 一个 ClassLoader 实例试图加载一个类的定义(如 作为正常方法调用的一部分或作为创建新实例的一部分 使用新的表达式)并且不能定义类 找到了。

    LocalDate today = LocalDate.now(); // Added 1.8
    

    阅读LocalDate

    请确保,您已在 build.gradle 部分添加此内容。

    compileOptions {
        sourceCompatibility JavaVersion.VERSION_1_8
        targetCompatibility JavaVersion.VERSION_1_8
        }
    

    仅供参考

    java.time 包仅在 API 26 中添加。

    所以,你应该设置

     minSdkVersion 26
    

    之后,Clean-Rebuild-Gradle。

    【讨论】:

      【解决方案2】:

      您正尝试在 API 级别低于 26 的设备(或模拟器)上运行您的应用程序。LocalDate 和 java.time 的其余部分是在级别 26 中引入的。但是,有一个向后移植允许您在早期的 Android 版本上使用最常用的 80%。我建议这对你来说是一个很好的解决方案。

      所以将 ThreeTenABP 库添加到您的项目中。并确保导入 org.threeten.bp.LocalDate 和 org.threeten.bp.DayOfWeek 而不是来自 java.time 的版本。那你应该没事。

      曾经有人告诉我依赖是(我没有测试):

      compile group: 'org.threeten', name: 'threetenbp', version: '1.3.3', classifier: 'no-tzdb'
      

      时间调整器

      顺便说一句,你的代码可以写成:

          LocalDate today = LocalDate.now(ZoneId.of("America/Tortola"));
          LocalDate monday = today.with(TemporalAdjusters.nextOrSame(DayOfWeek.MONDAY));
          LocalDate tue = today.with(TemporalAdjusters.nextOrSame(DayOfWeek.TUESDAY));
          LocalDate wed = today.with(TemporalAdjusters.nextOrSame(DayOfWeek.WEDNESDAY));
          LocalDate thur = today.with(TemporalAdjusters.nextOrSame(DayOfWeek.THURSDAY));
          LocalDate fri = today.with(TemporalAdjusters.nextOrSame(DayOfWeek.FRIDAY));
          LocalDate sat = today.with(TemporalAdjusters.nextOrSame(DayOfWeek.SATURDAY));
          LocalDate sunday = today.with(TemporalAdjusters.nextOrSame(DayOfWeek.SUNDAY));
      

      我使用了以下导入:

      import org.threeten.bp.DayOfWeek;
      import org.threeten.bp.LocalDate;
      import org.threeten.bp.ZoneId;
      import org.threeten.bp.temporal.TemporalAdjusters;
      

      链接

      【讨论】:

        【解决方案3】:

        使用 SimpleDateFormat 和日历。您可能还需要 sdk 26 前后的不同实现

            private String getCurrentDateTime() {
                if (android.os.Build.VERSION.SDK_INT >= Build.VERSION_CODES.O){
                    Log.d(TAG, "getCurrentDateTime: greater than O");
                    return LocalDateTime.now().format(DateTimeFormatter.ofPattern("h:m a"));
                } else{
                    Log.d(TAG, "getCurrentDateTime: less than O");
                    SimpleDateFormat SDFormat = new SimpleDateFormat("h:m a");
                    return SDFormat.format(new Date());
                }
        }
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2020-10-31
          • 2019-11-28
          • 2020-07-05
          • 2019-09-27
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多