2016-01-27 19 views
36

Ich habe ein seltsames Verhalten auf einigen Motorola-Geräten, LocalDateTime.now() mit ThreeTenABP zurückgibt.Motorola-Geräte: org.threeten.bp.DateTimeException beim Analysieren eines Datums in ThreeTen

Der Code ist wie folgt:

@Override 
protected void onResume() { 
    super.onResume(); 
    if (!TextUtils.isEmpty(timeout)) { 
     LocalDateTime savedTime = LocalDateTime.parse(timeout, DateTimeFormatter.ISO_DATE_TIME); 
     if (LocalDateTime.now().isAfter(savedTime)) { 
      refresh() 
     } 
    } 
} 

@Override 
protected void onPause() { 
    super.onPause(); 
    LocalDateTime currentTime = LocalDateTime.now().plus(Duration.ofMinutes(10)); 
    timeout = currentTime.format(DateTimeFormatter.ISO_DATE_TIME); 
} 

nur auf diesen Geräten (nur 3 Motorola-Geräte 6.0 ausgeführt wird):

Ich habe diesen Absturz:

Fatal Exception: java.lang.RuntimeException: Unable to resume activity {com.myapp/com.myapp.MainActivity}: org.threeten.bp.format.DateTimeParseException: Text '0000-00-00T00:00:00.8' could not be parsed: Invalid value for MonthOfYear (valid values 1 - 12): 0 
     at android.app.ActivityThread.performResumeActivity(ActivityThread.java:3121) 
     at android.app.ActivityThread.handleResumeActivity(ActivityThread.java:3152) 
     at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1398) 
     at android.os.Handler.dispatchMessage(Handler.java:102) 
     at android.os.Looper.loop(Looper.java:148) 
     at android.app.ActivityThread.main(ActivityThread.java:5443) 
     at java.lang.reflect.Method.invoke(Method.java) 
     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:728) 
     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:618) 
Caused by org.threeten.bp.format.DateTimeParseException: Text '0000-00-00T00:00:00.8' could not be parsed: Invalid value for MonthOfYear (valid values 1 - 12): 0 
     at org.threeten.bp.format.DateTimeFormatter.createError(DateTimeFormatter.java:1559) 
     at org.threeten.bp.format.DateTimeFormatter.parse(DateTimeFormatter.java:1496) 
     at org.threeten.bp.LocalDateTime.parse(LocalDateTime.java:444) 
     at com.myapp.MainActivity.onResume(MainActivity.java:273) 
     at android.app.Activity.performResume(Activity.java:6344) 
     at android.app.ActivityThread.performResumeActivity(ActivityThread.java:3110) 
     at android.app.ActivityThread.handleResumeActivity(ActivityThread.java:3152) 
     at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1398) 
     at android.os.Handler.dispatchMessage(Handler.java:102) 
     at android.os.Looper.loop(Looper.java:148) 
     at android.app.ActivityThread.main(ActivityThread.java:5443) 
     at java.lang.reflect.Method.invoke(Method.java) 
     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:728) 
     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:618) 
Caused by org.threeten.bp.DateTimeException: Invalid value for MonthOfYear (valid values 1 - 12): 0 
     at org.threeten.bp.temporal.ValueRange.checkValidValue(ValueRange.java:278) 
     at org.threeten.bp.temporal.ChronoField.checkValidValue(ChronoField.java:557) 
     at org.threeten.bp.LocalDate.of(LocalDate.java:237) 
     at org.threeten.bp.chrono.IsoChronology.resolveDate(IsoChronology.java:452) 
     at org.threeten.bp.format.DateTimeBuilder.mergeDate(DateTimeBuilder.java:297) 
     at org.threeten.bp.format.DateTimeBuilder.resolve(DateTimeBuilder.java:206) 
     at org.threeten.bp.format.DateTimeFormatter.parse(DateTimeFormatter.java:1491) 
     at org.threeten.bp.LocalDateTime.parse(LocalDateTime.java:444) 
     at com.myapp.MainActivity.onPostResume(MainActivity.java:273) 
     at android.app.Activity.performResume(Activity.java:6344) 
     at android.app.ActivityThread.performResumeActivity(ActivityThread.java:3110) 
     at android.app.ActivityThread.handleResumeActivity(ActivityThread.java:3152) 
     at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1398) 
     at android.os.Handler.dispatchMessage(Handler.java:102) 
     at android.os.Looper.loop(Looper.java:148) 
     at android.app.ActivityThread.main(ActivityThread.java:5443) 
     at java.lang.reflect.Method.invoke(Method.java) 
     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:728) 
     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:618) 

Linie 273 ist:

LocalDateTime savedTime = LocalDateTime.parse(timeout, DateTimeFormatter.ISO_DATE_TIME); 

Also im Grunde LocaleDateTime.now() gibt eine ungültige Datum Zeit und Parsing fehlschlägt.

Die andere interessante Sache ist, dass es nur seit Anfang Januar passiert ist. Hat jemand jemals dieses Problem konfrontiert?

+0

Vielleicht ist das gleiche Problem wie in diesem [SO-Frage] beschrieben (http://stackoverflow.com/questions/34691990/weird-org-threeten-bp-datetimeexception- geworfen), siehe auch meine Antwort dort. –

+0

Haben Sie die lib verlassen? Ein solches Problem ist extrem ärgerlich. –

+0

@MenoHochschild Danke für die verwandte Frage, es sieht sehr ähnlich aus, obwohl es keine Erwähnung von Motorola & Android 6 aus irgendeinem Grund gibt –

Antwort

0

Verwenden Sie den folgenden anstelle

Calendar calendar = Calendar.getInstance(); 
calendar.add(Calendar.MINUTE,10); 
Date date = calendar.getTime();