当前位置: 首页 > 面试题库 >

Android上的ThreeTen-Backport错误-ZoneRulesException:未注册时区数据文件

程谦
2023-03-14
问题内容

我正在将ThreeTen-Backport库用于我的Android项目(因为java.time尚未在android开发中实现)。

当我写LocalDate today=LocalDate.now();LocalTime time=LocalTime.now();得到以下异常时:

Caused by: org.threeten.bp.zone.ZoneRulesException: 
  No time-zone data files registered   
      at org.threeten.bp.zone.ZoneRulesProvider.getProvider(ZoneRulesProvider.java:176)
      at org.threeten.bp.zone.ZoneRulesProvider.getRules(ZoneRulesProvider.java:133)
      at org.threeten.bp.ZoneRegion.ofId(ZoneRegion.java:143)
      at org.threeten.bp.ZoneId.of(ZoneId.java:357)
      at org.threeten.bp.ZoneId.of(ZoneId.java:285)
      at org.threeten.bp.ZoneId.systemDefault(ZoneId.java:244)
      at org.threeten.bp.Clock.systemDefaultZone(Clock.java:137)
      at org.threeten.bp.LocalDate.now(LocalDate.java:165)

同一行代码在我拥有的另一个使用本机java.time库的Java项目中也能很好地工作。

我搜索了一个可能的解决方案,但找不到任何有用的解决方案:一个解决方案建议我需要使用另一个包含时区规则的jar,另一个建议在类路径中可能包含两个或多个ThreeTenBP库。
这些情况与我的情况不符。

build.gradle文件内的“依赖项”部分,我尝试了几种配置:

  • 起初,我用- compile 'com.jakewharton.threetenabp:threetenabp:1.0.3'
  • 然后,我尝试- compile 'org.threeten:threetenbp:1.0.3'
  • 之后,我尝试- compile 'org.threeten:threetenbp:1.3.1'
  • 目前,我使用 compile 'org.threeten:threetenbp:1.3.2'

我不知道那行代码有什么问题以及如何解决。
LocalDate.now()LocalTime.now()方法应该工作而没有指定时区。


问题答案:

对于Android项目,您应该使用

implementation 'com.jakewharton.threetenabp:threetenabp:1.0.3'

AndroidThreeTen.init(this);在使用库中的类之前,请确保先调用。这将读取时区数据(包含在库中)。您可以使用README中推荐ApplicationonCreate方法在类中初始化该库。



 类似资料:
  • 我正在为我的Android项目使用ThreeTen-Backport库(因为在Android开发中还没有实现java.time)。 我搜索了一个可能的解决方案,但没有找到任何有用的东西:一个解决方案建议我需要使用另一个包含时区规则的jar,另一个建议在类路径中可能有两个或更多的threetenbp库。 这些情况与我的情况不匹配。 在文件的依赖项部分,我尝试了几种配置: 最初,我使用- 然后,我尝试

  • 我使用的是Android GCM推送服务,它在一段时间内运行良好,但如果我让我的应用程序闲置几分钟,或者当我在代码修改后重新运行它时,我没有收到任何消息,GCM服务器给我这个错误:“NotRegistered”我做了一些重新搜索,我发现了这个问题,但我还不能在那里发表评论(低声誉:(而且帖子太旧了) 在浏览过程中,我发现Google服务器有时会自动刷新注册id,所以我需要知道的是GCM服务器何时对

  • 在64位计算机上运行Visual Studio 2012应用程序时,会显示以下错误消息: 由于以下错误,检索CLSID为{F2D4F4E5-EEA1-46FF-A83B-A270C92DAE4B}的组件的COM类工厂失败:80040154类未注册(HRESULT的异常:0x80040154(REGDB_E_CLASSNOTREG)) 我正在visualstudio中使用Inventor packa

  • 问题内容: 我一直在尝试隔离应用程序中的错误。我成功产生了以下“谜语”: 在Android API 7上 运行此代码时,我得到了注释中的值(是的,是的)。此行为取决于特定的Java实现。 我的问题是: 为什么s1不等于s2? 更重要的是, 为什么s1不正确? 虽然指向适当的时间点,但没有。Android的SimpleDateFormat实现中似乎存在一个错误。 问题1 的答案 : 请参阅Balus

  • 我有一个包含各种列的表“用户”。其中一列是用户名。我决定通过迁移删除该列。这样做之后,我试图通过注册表单(创建操作)创建一个新用户,但收到用户名的未定义方法错误,我不确定为什么。@user.save 上引发错误。 下面是相关的代码,首先是用户控制器的动作,然后是实际提交的表单。 有什么想法吗?堆栈跟踪,根据要求: