java.lang.NoClassDefFoundError:解析失败:Ljava/time/LocalDate;错误

java.lang.NoClassDefFoundError:解析失败:Ljava/time/LocalDate;错误,java,android,java-time,Java,Android,Java Time,我什么都试过了,但错误没有解决 这是我的密码: public String[] getWeekDays() { LocalDate today = LocalDate.now(); LocalDate monday = today; LocalDate tue = today; LocalDate wed = today; LocalDate thur = today; LocalDate fri = today; LocalDate s

我什么都试过了,但错误没有解决

这是我的密码:

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虚拟机或 ClassLoader实例尝试加载类的定义(如 作为普通方法调用的一部分或作为创建新实例的一部分 使用新表达式)并且无法创建类的任何定义 找到了

阅读

请确保您已在
build.gradle
部分中添加了此选项

compileOptions {
    sourceCompatibility JavaVersion.VERSION_1_8
    targetCompatibility JavaVersion.VERSION_1_8
    }
FYI

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

所以,你应该设置

 minSdkVersion 26

之后,如果Java虚拟机或类加载器实例尝试加载类的定义(作为普通方法调用的一部分,或作为使用新表达式创建新实例的一部分),并且找不到该类的定义,则会抛出清理重建梯度。
编译当前执行的类时,已存在搜索的类定义,但无法再找到该定义。

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

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

我曾经被告知依赖性是(我没有测试):

临时调节器 另外,您的代码可以写成:

    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;
链接
  • ,其中首先描述了
    java.time
  • ,java.time的后端口到Java6和Java7(JSR-310为三十)
  • ,Android版Three Ten Backport
  • ,解释得非常透彻

使用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());
        }
}
import org.threeten.bp.DayOfWeek;
import org.threeten.bp.LocalDate;
import org.threeten.bp.ZoneId;
import org.threeten.bp.temporal.TemporalAdjusters;
    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());
        }
}