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
- ,解释得非常透彻
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());
}
}