Я все перепробовал, но ошибка не решается
Вот мой код:
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. А также попробовал добавить «скомпилировать» java.time: LocalTime: 1.8 «». Этот тоже не работает. Помогите, пожалуйста...




NoClassDefFoundError-Thrown if the Java Virtual Machine or a ClassLoader instance tries to load in the definition of a class (as part of a normal method call or as part of creating a new instance using the new expression) and no definition of the class could be found.
LocalDate today = LocalDate.now(); // Added 1.8
Убедитесь, что вы добавили это в свой раздел build.gradle.
compileOptions {
sourceCompatibility JavaVersion.VERSION_1_8
targetCompatibility JavaVersion.VERSION_1_8
}
К вашему сведению
Пакет java.time был добавлен только в API 26.
Итак, вы должны установить
minSdkVersion 26
После этого Clean-Rebuild-Gradle.
Выбрасывается, если виртуальная машина Java или экземпляр ClassLoader пытается загрузить определение класса (как часть обычного вызова метода или как часть создания нового экземпляра с использованием нового выражения) и определение класса не может быть найдено. Определение искомого класса существовало, когда выполняемый в данный момент класс был скомпилирован, но определение больше не может быть найдено.
Вы пытаетесь запустить свое приложение на устройстве (или симуляторе) с уровнем API ниже 26. LocalDate и остальная часть java.time были представлены на уровне 26. Однако существует обратный порт, который позволяет использовать наиболее часто используемые 80 % от этого в более ранних версиях Android. Я полагаю, что это хорошее решение для вас.
Так что добавьте в свой проект библиотеку 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;
java.time.java.time для Java 6 и 7 (ThreeTen для JSR-310).Используйте SimpleDateFormat и Календарь. Вам также могут понадобиться разные реализации для pre и post 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());
}
}