无法解决 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.Date
、Calendar
和 SimpleDateFormat
。
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 8、Java SE 9、Java SE 10 及更高版本 内置。 标准 Java API 的一部分,带有捆绑实现。 Java 9 添加了一些小功能和修复。 Java SE 6 和 Java 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 显示“无法解析符号”