当前位置: 首页 > 知识库问答 >
问题:

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

邢灿
2023-03-14

我正在为我的Android项目使用ThreeTen-Backport库(因为在Android开发中还没有实现java.time)。

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)

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

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

  • 最初,我使用-编译'com.jakewharton.threetenabp:threetenabp:1.0.3“
  • 然后,我尝试了-编译'org.threeten:threetenbp:1.0.3'
  • 之后,我尝试-编译'org.threeten:threetenbp:1.3.1'
  • 当前,我使用编译'org.threeten:threetenbp:1.3.2'

我不知道这一行代码有什么问题,以及如何修复它。
localdate.now()localtime.now()方法不需要指定时区就可以工作。

共有1个答案

窦涵忍
2023-03-14

对于Android项目,您应该使用

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

请确保在使用库中的类之前调用AndroidThreeTen.init(this);。这将读取时区数据(包含在库中)。您可以在oncreate方法中初始化application类中的库,就像自述文件中推荐的那样。

 类似资料:
  • 问题内容: 我正在将ThreeTen-Backport库用于我的Android项目(因为java.time尚未在android开发中实现)。 当我写或得到以下异常时: 同一行代码在我拥有的另一个使用本机java.time库的Java项目中也能很好地工作。 我搜索了一个可能的解决方案,但找不到任何有用的解决方案:一个解决方案建议我需要使用另一个包含时区规则的jar,另一个建议在类路径中可能包含两个或

  • 我使用的是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 上引发错误。 下面是相关的代码,首先是用户控制器的动作,然后是实际提交的表单。 有什么想法吗?堆栈跟踪,根据要求: