Java.lang.NoClassDefFoundError: Ошибка разрешения: Ljava / time / LocalDate; ошибка

Я все перепробовал, но ошибка не решается

Вот мой код:

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 «». Этот тоже не работает. Помогите, пожалуйста...

Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
4
0
10 079
4
Перейти к ответу Данный вопрос помечен как решенный

Ответы 4

Ответ принят как подходящий

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

Прочитать LocalDate

Убедитесь, что вы добавили это в свой раздел 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'

TemporalAdjusters

В стороне ваш код может быть записан как:

    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;

Ссылки

Используйте 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());
        }
}

Другие вопросы по теме