не удается устранить ошибку символа 'java.time.LocalDate' в студии Android

Я пытаюсь использовать java.time.LocalDate в своем приложении для Android, однако, если я попытаюсь его импортировать, то любой класс из java.time выдает неразрешимую ошибку символа в студии Android 1.1.

Единственная причина, по которой я мог это понять, заключается в том, что он не поддерживает Java 8. Это действительно так?


person siim sammul    schedule 26.02.2015    source источник
comment
Этот другой вопрос на самом деле не является дубликатом. Он спрашивает о Java 8 в целом, а этот Вопрос здесь посвящен конкретному пакету классов. И теперь, в 2016 году, вы можете использовать функции языка Java 8 в разработке для Android, но не использовать классы java.time. Итак, две разные проблемы, два разных решения и два разных вопроса.   -  person Basil Bourque    schedule 12.07.2016


Ответы (4)


Android API уровня 26

Android API уровня 26 получил реализацию java.time, включая ваш LocalDate класс.

Ранний Android

Для Android ‹ 26 альтернативы включают:

  • ThreeTen-Backport is a back-port of much of the java.time functionality to Java 6 & 7.
  • Joda-Time обычно используется в проектах Android. Joda-Time вдохновил пакет java.time в Java 8, но они не являются заменой. Команда Joda-Time рекомендует перейти на java.time.

О java.time

java.time framework встроен в Java 8 и более поздние версии. Эти классы заменяют проблемные старые устаревшие классы даты и времени, такие как java.util.Date, Calendar и SimpleDateFormat.

Проект Joda-Time, теперь в режим обслуживания, советует перейти на java.time.

Дополнительные сведения см. в Учебном руководстве по Oracle. . И поищите множество примеров и пояснений в Stack Overflow. Спецификация: JSR 310.

Вы можете обмениваться объектами java.time непосредственно с вашей базой данных. Используйте драйвер JDBC, совместимый с JDBC 4.2 или более поздней версии. Нет необходимости в строках, нет необходимости в java.sql.* классах.

Где получить классы java.time?

  • Java SE 8, Java SE 9, Java SE 10, and later
    • Built-in.
    • Часть стандартного Java API со встроенной реализацией.
    • Java 9 добавляет некоторые незначительные функции и исправления.
  • Java SE 6 and Java SE 7
    • Much of the java.time functionality is back-ported to Java 6 & 7 in ThreeTen-Backport.
  • Android
    • Later versions of Android bundle implementations of the java.time classes.
    • Для более ранней версии Android (‹26) ThreeTenABP проект адаптирует ThreeTen-Backport (упомянутый выше). См. Как использовать ThreeTenABP….
person Basil Bourque    schedule 26.02.2015
comment
+1 за подсказку о том, что Threeten-backport не является полным backport (поддержка i18n отличается из-за измененной среды, а также меньшей поддержки календаря). - person Meno Hochschild; 16.09.2015
comment
java.time был добавлен в API26 developer.android.com/reference/java/time /LocalDate.html - person maracuja-juice; 04.03.2018
comment
@maracuja-juice Так отмечено в моем исправленном ответе. Спасибо - person Basil Bourque; 04.03.2018
comment
Мне интересно, что Android Studio не предупреждает об этом? - person Lou Morda; 02.04.2018

Да, Android не поддерживает Java-8. А о новом API даты/времени, содержащемся в Java-8, вы можете посмотреть в этом выпуске:

http://code.google.com/p/android/issues/detail?id=62192< /а>

В настоящее время нет планов по внедрению JSR-310 (java.time-package) в Google Android.

person Meno Hochschild    schedule 26.02.2015

Наконец, API даты/времени, содержащийся в Java 8, добавлен к недавно выпущенному API уровня 26 Android.

API DateTimeFormatter 26

person Mara    schedule 24.08.2017
comment
но бесполезно, потому что он поддерживает только в том случае, если ваш текущий минимальный SDK равен 26 - person Hamza; 13.12.2017

Теперь вы можете использовать API-интерфейсы java.time и другие API-интерфейсы Java 8+, не требуя минимального уровня API для вашего приложения, благодаря поддержке дешугаринга API (Android Gradle Plugin 4.0.0+)

https://developer.android.com/studio/write/java8-support#library-desugaring

Вкратце, вы должны использовать плагин Android Gradle 4.0.0 или выше и включить coreLibraryDesugaringEnabled true в свои параметры компиляции.

android {
  defaultConfig {
    // Required when setting minSdkVersion to 20 or lower
    multiDexEnabled true
  }

  compileOptions {
    // Flag to enable support for the new language APIs
    coreLibraryDesugaringEnabled true
    // Sets Java compatibility to Java 8
    sourceCompatibility JavaVersion.VERSION_1_8
    targetCompatibility JavaVersion.VERSION_1_8
  }
}
person Khang Le    schedule 05.03.2021