Android Studio中出现“无法解析符号'java.time.LocalDate'”错误

20
我试图在我的安卓应用程序中使用java.time.LocalDate,但是如果我尝试导入它,那么Android Studio 1.1中的任何java.time类都会出现“无法解析符号”的错误。
我想到的唯一原因是Android不支持Java8。这是真的吗?

那个问题并不是真正的重复。它询问Java 8的一般情况,而这个问题则专注于特定的类包。现在在2016年,你可以在Android开发中使用Java 8语言特性,但不能使用java.time类。因此,存在两个不同的问题,两种不同的解决方案和两个不同的问题。 - Basil Bourque
4个回答

19

Android API 26

Android API level 26现在包含了java.time的实现,其中包括LocalDate类。

早期的Android版本

对于Android <26,可选方案包括:

  • ThreeTen-Backport是将大部分java.time功能回溯到Java 6和7的后移端口。
    • ThreeTenABP将ThreeTen-Backport适配到Android上。
  • Joda-Time通常在Android项目中使用。 Joda-Time启发了Java 8中的java.time包,但它们不能直接替换。 Joda-Time团队建议迁移到java.time。

关于java.time

java.time框架内置于Java 8及其后续版本中。这些类取代了老旧的遗留日期时间类,如java.util.DateCalendarSimpleDateFormat

Joda-Time项目现已进入维护模式,建议迁移到java.time类。

欲了解更多,请参阅Oracle教程。并在Stack Overflow中搜索许多示例和解释。规范为JSR 310

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

如何获取java.time类?

  • Java SE 8Java SE 9Java SE 10及更高版本:
    • 内置。
    • 作为标准Java API的一部分,有一个捆绑的实现。
    • Java 9增加了一些次要功能和修复。
  • Java SE 6Java SE 7
  • Android
    • 较新版本的 Android 包含 java.time 类的实现。
    • 对于早期的 Android (<26),ThreeTenABP 项目采用了上述提到的 ThreeTen-Backport。请参见 如何使用 ThreeTenABP…

  • +1 是为了提示 Threeten-backport 并不是完整的后移(由于环境变化和更少的日历支持,国际化支持也有所不同)。 - Meno Hochschild
    java.time是在API26中添加的 https://developer.android.com/reference/java/time/LocalDate.html - maracuja-juice
    @maracuja-juice,我在修改后的回答中已经做了注明。谢谢。 - Basil Bourque
    我觉得有趣的是,Android Studio没有警告这个问题? - Lou Morda

    5

    2

    最终,包含在Java 8中的日期/时间API已经添加到Android API级别26中,该版本最近发布。

    DateTimeFormatter API 26


    4
    但是它是无用的,因为它只支持当前最低SDK为26的情况。 - Hamza

    1

    现在,由于API desugaring支持(Android Gradle Plugin 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,这样才能使内容通俗易懂。请保留HTML标签。
    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
      }
    }
    

    网页内容由stack overflow 提供, 点击上面的
    可以查看英文原文,
    原文链接