java.lang.NoClassDefFoundError:无法解决以下问题:Ljava / time / LocalDate;错误

时间:2018-09-26 05:14:09

标签: java android java-time

我尝试了一切,但错误仍未解决

这是我的代码:

public String[] getWeekDays() {

    LocalDate today = LocalDate.now();
    LocalDate monday = today;
    LocalDate tue = today;
    LocalDate wed = today;
    LocalDate thur = today;
    LocalDate fri = today;
    LocalDate sat = today;
    LocalDate sunday = today;
    while (sunday.getDayOfWeek() != DayOfWeek.SUNDAY){
        sunday = sunday.minusDays(1);
     }
     while (monday.getDayOfWeek() != DayOfWeek.MONDAY){
        monday = monday.minusDays(1);
     }
     while (tue.getDayOfWeek() != DayOfWeek.TUESDAY){
        tue = tue.plusDays(1);
     }
     while (wed.getDayOfWeek() != DayOfWeek.WEDNESDAY){
        wed = wed.plusDays(1);
     }
     while (thur.getDayOfWeek() != DayOfWeek.THURSDAY){
        thur = thur.plusDays(1);
     }
     while (fri.getDayOfWeek() != DayOfWeek.FRIDAY){
        fri = fri.plusDays(1);
     }
     while (sat.getDayOfWeek() != DayOfWeek.SATURDAY){
        sat = sat.plusDays(1);
     }

     String[] days = {String.valueOf(sunday),String.valueOf(monday), String.valueOf(tue), String.valueOf(wed),
                String.valueOf(thur), String.valueOf(fri), String.valueOf(sat)};
    return days;
}

我已编写代码以获取一个星期的日期。当我运行此代码时,LocalDate.now();出现错误。该错误是“ java.lang.NoClassDefFoundError:无法解决以下问题:Ljava / time / LocalDate;”。 我已经在网上搜索了。有人说它要求API级别至少为27。我对API 27级别感到厌倦,但该错误未得到解决。我的目标设备更多地是我需要在此API级别上运行的API 26。并且还尝试添加“编译” java.time:LocalTime:1.8“”。这一项也不起作用。 请帮助我...

4 个答案:

答案 0 :(得分:4)

  

NoClassDefFoundError-如果Java虚拟机或   ClassLoader实例尝试加载类的定义(如   普通方法调用的一部分或创建新实例的一部分   使用新的表达式),则无法定义该类   找到。

<div>
  <div>
    Category 1
    <div>
      Subcategory 1
      <div>
        Privilege 11
      </div>
    </div>
  </div>
  <div>
    Category 2
      <div>
      Subcategory 2
      <div>
        Privilege 21
      </div>
      <div>
        Privilege 22
      </div>
    </div>
  </div>
</div>

阅读LocalDate

请确保您已在LocalDate today = LocalDate.now(); // Added 1.8 部分中添加了此内容。

build.gradle

仅供参考

compileOptions { sourceCompatibility JavaVersion.VERSION_1_8 targetCompatibility JavaVersion.VERSION_1_8 } 程序包仅在API 26中添加。

所以,您应该设置

java.time

然后, minSdkVersion 26

答案 1 :(得分:2)

您正尝试在API级别低于26的设备(或模拟器)上运行您的应用。<script src="js/jquery-1.12.4.js"></script> <script src="js/jquery-ui.js"></script> <script type="text/javascript"> $(document).ready(){ $( "#datepicker" ).datepicker({ closeText: 'Fermer', prevText: 'Précédent', nextText: 'Suivant', currentText: 'Aujourd\'hui', monthNames: ['janvier', 'février', 'mars', 'avril', 'mai', 'juin', 'juillet', 'août', 'septembre', 'octobre', 'novembre', 'décembre'], monthNamesShort: ['janv.', 'févr.', 'mars', 'avril', 'mai', 'juin', 'juil.', 'août', 'sept.', 'oct.', 'nov.', 'déc.'], dayNames: ['dimanche', 'lundi', 'mardi', 'mercredi', 'jeudi', 'vendredi', 'samedi'], dayNamesShort: ['dim.', 'lun.', 'mar.', 'mer.', 'jeu.', 'ven.', 'sam.'], dayNamesMin: ['D', 'L', 'M', 'M', 'J', 'V', 'S'], weekHeader: 'Sem.', dateFormat: 'dd/mm/yy', timeFormat: 'HH:mm', firstDay: 1, isRTL: false, showMonthAfterYear: false, yearSuffix: '' });$.datepicker.setDefaults( $.datepicker.regional[ "fr" ] ); // texte en french marche pas }); </script> 和其他java.time在级别26中引入。但是,有一个反向端口允许您可以在Android早期版本中使用最常用的80%。我建议这对您来说是一个很好的解决方案。

因此,将ThreeTenABP库添加到您的项目中。并确保您导入LocalDateorg.threeten.bp.LocalDate而不是org.threeten.bp.DayOfWeek中的版本。那你应该没事。

曾经有人告诉我,依存关系是(我没有测试):

java.time

TemporalAdjusters

顺便说一句,您的代码可以写为:

compile group: 'org.threeten', name: 'threetenbp', version: '1.3.3', classifier: 'no-tzdb'

我使用了以下导入:

    LocalDate today = LocalDate.now(ZoneId.of("America/Tortola"));
    LocalDate monday = today.with(TemporalAdjusters.nextOrSame(DayOfWeek.MONDAY));
    LocalDate tue = today.with(TemporalAdjusters.nextOrSame(DayOfWeek.TUESDAY));
    LocalDate wed = today.with(TemporalAdjusters.nextOrSame(DayOfWeek.WEDNESDAY));
    LocalDate thur = today.with(TemporalAdjusters.nextOrSame(DayOfWeek.THURSDAY));
    LocalDate fri = today.with(TemporalAdjusters.nextOrSame(DayOfWeek.FRIDAY));
    LocalDate sat = today.with(TemporalAdjusters.nextOrSame(DayOfWeek.SATURDAY));
    LocalDate sunday = today.with(TemporalAdjusters.nextOrSame(DayOfWeek.SUNDAY));

链接

答案 2 :(得分:0)

如果Java虚拟机或ClassLoader实例尝试加载类的定义(作为常规方法调用的一部分或使用新表达式创建新实例的一部分),则抛出该错误,并且该类的定义无法被发现。 搜索的类定义在编译当前正在执行的类时存在,但无法再找到该定义。

答案 3 :(得分:0)

使用 SimpleDateFormat 和日历。您可能还需要针对 sdk 26 前后的不同实现

    private String getCurrentDateTime() {
        if (android.os.Build.VERSION.SDK_INT >= Build.VERSION_CODES.O){
            Log.d(TAG, "getCurrentDateTime: greater than O");
            return LocalDateTime.now().format(DateTimeFormatter.ofPattern("h:m a"));
        } else{
            Log.d(TAG, "getCurrentDateTime: less than O");
            SimpleDateFormat SDFormat = new SimpleDateFormat("h:m a");
            return SDFormat.format(new Date());
        }
}