无法解析符号' java.time.LocalDate' android studio中的错误

时间:2015-02-26 14:37:27

标签: java android android-studio java-8 java-time

我正在尝试在我的Android应用程序中使用java.time.LocalDate,但是如果我尝试导入它,则java.time中的任何类都会在Android Studio 1.1中无法解析符号错误

我能解决这个问题的唯一原因是它不支持java 8.真的是这样吗?

4 个答案:

答案 0 :(得分:14)

Android API等级26

Android API级别26获得了 java.time 的实现,包括您的LocalDate类。

早期Android

对于Android< 26,替代方案包括:

  • ThreeTen-Backport是Java 6&amp ;;的大部分java.time功能的后端。 7。
  • Joda-Time常用于Android项目。 Joda-Time启发了Java 8中的java.time包,但它们不是替代品。 Joda-Time团队建议迁移到java.time。

关于 java.time

java.time框架内置于Java 8及更高版本中。这些类取代了麻烦的旧legacy日期时间类,例如java.util.DateCalendar和& SimpleDateFormat

现在位于Joda-Timemaintenance mode项目建议迁移到java.time类。

要了解详情,请参阅Oracle Tutorial。并搜索Stack Overflow以获取许多示例和解释。规范是JSR 310

您可以直接与数据库交换 java.time 对象。使用符合JDBC driver或更高版本的JDBC 4.2。不需要字符串,不需要java.sql.*类。

从哪里获取java.time类?

答案 1 :(得分:5)

是的,Android不支持Java-8。关于Java-8中包含的新日期/时间API,您可以查看此问题:

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

目前还没有计划在谷歌Android中引入JSR-310(java.time-package)。

答案 2 :(得分:2)

最后日期/时间 - Java 8中包含的API被添加到最近发布的Android API级别26中。

DateTimeFormatter API 26

答案 3 :(得分:0)

由于 API 脱糖支持(Android Gradle 插件 4.0.0+),您现在可以使用 java.time API 和其他 Java 8+ API,而无需为您的应用设置最低 API 级别

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

简而言之,您必须使用 Android Gradle 插件 4.0.0 或更高版本,并在您的 compileOptions 中包含 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
  }
}