无法解决 android studio 中的符号“java.time.LocalDate”错误

Posted

技术标签:

【中文标题】无法解决 android studio 中的符号“java.time.LocalDate”错误【英文标题】:cannot resolve symbol 'java.time.LocalDate' error in android studio 【发布时间】:2015-04-28 23:49:13 【问题描述】:

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

我能弄清楚的唯一原因是它不支持 java 8。真的是这样吗?

【问题讨论】:

其他问题并不是真正的重复。它一般询问 Java 8,而这里的这个问题侧重于特定的类包。现在在 2016 年,您可以在 Android 开发中使用 Java 8 语言功能,但不能使用 java.time 类。所以两个不同的问题,两个不同的解决方案,两个不同的问题。 【参考方案1】:

Android API 级别 26

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

早期的安卓

对于 Android

ThreeTen-Backport 是 Java 6 和 7 的大部分 java.time 功能的反向移植。 ThreeTenABP 使 ThreeTen-Backport 适应 Android。 Joda-Time 常用于 Android 项目中。 Joda-Time 启发了 Java 8 中的 java.time 包,但它们并不是直接替代品。 Joda-Time 团队建议迁移到 java.time。

关于java.time

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

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

要了解更多信息,请参阅Oracle Tutorial。并在 Stack Overflow 上搜索许多示例和解释。规格为JSR 310。

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

从哪里获得 java.time 类?

Java SE 8Java SE 9Java SE 10 及更高版本 内置。 标准 Java API 的一部分,带有捆绑实现。 Java 9 添加了一些小功能和修复。 Java SE 6Java SE 7 ThreeTen-Backport 中的大部分 java.time 功能都向后移植到 Java 6 和 7。 Android java.time 类的 Android 捆绑包实现的更高版本。 对于早期的 Android (ThreeTenABP 项目采用 ThreeTen-Backport(如上所述)。见How to use ThreeTenABP…

【讨论】:

+1 暗示 Threeten-backport 不是一个完整的 backport(i18n-support 因环境变化和日历支持较少而有所不同)。 java.time 被添加到 API26 developer.android.com/reference/java/time/LocalDate.html @maracuja-juice 在我修改后的答案中如此指出。谢谢 我觉得有趣的是,Android Studio 没有对此发出警告?【参考方案2】:

是的,Android 不支持 Java-8。而关于Java-8中包含的新的date/time-API,大家可以看看这个issue:

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

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

【讨论】:

【参考方案3】:

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

DateTimeFormatter API 26

【讨论】:

但没用,因为它仅支持您当前的最小 SDK 为 26【参考方案4】:

借助 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
  

【讨论】:

以上是关于无法解决 android studio 中的符号“java.time.LocalDate”错误的主要内容,如果未能解决你的问题,请参考以下文章

无法解析 style.xml 中的符号“主题”(Android Studio)

RecyclerView“无法解析符号”错误,-Android Studio

Android Studio 无法解析导入的 AAR 模块中的符号

尝试访问导入库中的方法时,Android Studio 显示“无法解析符号”

Android Studio 1.0.2 新项目 - 无法解析符号“ActionBarActivity”

在不重建项目的情况下无法在 Android Studio 中找到符号