我遇到了这样一个奇怪的情况:我使用DateTimeForMatter的函数对我来说工作得很好(即RSS提要列表按照它发布的顺序进行排序),但对于我的应用程序的一些用户来说,它崩溃了.起初,我以为可能有一个与地区相关的问题,但似乎所有的RSS提要都使用locale.English
格式,所以现在我没有 idea 了.我也有用户在他们的设备上设置了美式英语(我使用英国英语)的崩溃报告.是我的代码有问题还是其他可能的原因?
我使用罗马解析器,pubDates的解析方式如下:Sat Aug 12 12:51:34 GMT+01:00 2023
suspend fun sortDateTimeAndSaveLatestHeadline() {
val dataStore = AppDataStore(getApplication())
val listOfStringDates: MutableList<String> = mutableListOf()
val listOfHeadlines: MutableList<String> = mutableListOf()
val listOfFeedTitles: MutableList<String> = mutableListOf()
newsFeed.value?.forEach { feed ->
listOfStringDates.add(feed.feedItem.pubDate)
listOfHeadlines.add(feed.feedItem.title)
listOfFeedTitles.add(feed.feedTitle)
}
val zippedLists = listOfStringDates.zip(listOfHeadlines)
.zip(listOfFeedTitles) { (a, b), c -> Triple(a, b, c) }
val dateTimeFormatter: DateTimeFormatter =
DateTimeFormatter.ofPattern("EEE MMM dd HH:mm:ss O yyyy", Locale.ENGLISH)
val result = zippedLists.sortedByDescending {
LocalDateTime.parse(it.first, dateTimeFormatter)
}
if (result.isNotEmpty()) {
dataStore.saveTileHeadline(result[0].second)
dataStore.saveFeedTitle(result[0].third)
println("Headline = ${result[0].second}")
}
}
这是堆栈跟踪:
Exception java.time.format.DateTimeParseException:
at java.time.format.DateTimeFormatter.parseResolved0 (DateTimeFormatter.java:1949)
at java.time.format.DateTimeFormatter.parse (DateTimeFormatter.java:1851)
at java.time.LocalDateTime.parse (LocalDateTime.java:486)
at java.util.TimSort.countRunAndMakeAscending (TimSort.java:355)
at java.util.TimSort.sort (TimSort.java:220)
at java.util.Arrays.sort (Arrays.java:1424)
at kotlin.collections.CollectionsKt___CollectionsKt.sortedWith (CollectionsKt___Collections.kt)
at com.strangerweather.news.presentation.screens.screens.FeedItemsScreenKt$FeedItemsScreen$7$1.invoke (FeedItemsScreen.kt)
at androidx.wear.compose.foundation.lazy.ScalingLazyColumnKt$ScalingLazyColumn$1$1$2$1.invoke (ScalingLazyColumn.kt)
at androidx.compose.foundation.lazy.layout.LazyLayoutIntervalContent.<init> (LazyLayoutIntervalContent.java)
at androidx.compose.foundation.lazy.LazyListIntervalContent.<init> (LazyListIntervalContent.java)
at androidx.compose.runtime.snapshots.Snapshot$Companion.observe (Snapshot.java)
at androidx.compose.runtime.DerivedSnapshotState.currentRecord (DerivedSnapshotState.java)
at androidx.compose.runtime.snapshots.SnapshotKt.getLock (Snapshot.kt)
at androidx.compose.runtime.DerivedSnapshotState$ResultRecord.readableHash (DerivedSnapshotState.java)
at androidx.compose.runtime.snapshots.SnapshotKt.getLock (Snapshot.kt)
at androidx.compose.runtime.DerivedSnapshotState$ResultRecord.isValid (DerivedSnapshotState.java)
at androidx.compose.runtime.DerivedSnapshotState.currentRecord (DerivedSnapshotState.java)
at androidx.compose.runtime.DerivedSnapshotState.getCurrentRecord (DerivedSnapshotState.java)
at androidx.compose.runtime.snapshots.SnapshotStateObserver$ObservedScopeMap.recordInvalidation (SnapshotStateObserver.java)
at androidx.compose.runtime.snapshots.SnapshotStateObserver.drainChanges (SnapshotStateObserver.java)
at androidx.compose.runtime.snapshots.SnapshotStateObserver.access$drainChanges (SnapshotStateObserver.java)
at androidx.compose.runtime.snapshots.SnapshotKt.advanceGlobalSnapshot (Snapshot.kt)
at androidx.compose.runtime.snapshots.SnapshotKt.advanceGlobalSnapshot (Snapshot.kt)
at androidx.compose.runtime.snapshots.SnapshotKt.access$advanceGlobalSnapshot (Snapshot.kt)
at androidx.compose.runtime.snapshots.GlobalSnapshot.notifyObjectsInitialized$runtime_release (GlobalSnapshot.java)
at androidx.compose.runtime.DerivedSnapshotState.currentRecord (DerivedSnapshotState.java)
at androidx.compose.runtime.snapshots.Snapshot$Companion.getCurrent (Snapshot.java)
at androidx.compose.runtime.DerivedSnapshotState.getValue (DerivedSnapshotState.java)
at androidx.wear.compose.foundation.lazy.ScalingLazyListState.getLayoutInfo (ScalingLazyListState.java)
at androidx.wear.compose.foundation.lazy.ScalingLazyListState.scrollToItem$compose_foundation_release (ScalingLazyListState.java)
at androidx.wear.compose.foundation.lazy.ScalingLazyListState.scrollToInitialItem$compose_foundation_release (ScalingLazyListState.java)
at androidx.wear.compose.foundation.lazy.ScalingLazyColumnKt$ScalingLazyColumn$1$1$3$1.invokeSuspend (ScalingLazyColumn.kt)
at kotlin.coroutines.jvm.internal.BaseContinuationImpl.resumeWith (BaseContinuationImpl.java)
at kotlinx.coroutines.DispatchedTask.run (DispatchedTask.java)
at androidx.compose.ui.platform.AndroidUiDispatcher.nextTask (AndroidUiDispatcher.java)
at androidx.compose.ui.platform.AndroidUiDispatcher.performTrampolineDispatch (AndroidUiDispatcher.java)
at androidx.compose.ui.platform.AndroidUiDispatcher.access$performTrampolineDispatch (AndroidUiDispatcher.java)
at androidx.compose.ui.platform.AndroidUiDispatcher$dispatchCallback$1.run (AndroidUiDispatcher.java)
at android.os.Handler.handleCallback (Handler.java:938)
at android.os.Handler.dispatchMessage (Handler.java:99)
at android.os.Looper.loop (Looper.java:246)
at android.app.ActivityThread.main (ActivityThread.java:7690)
at java.lang.reflect.Method.invoke
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run (RuntimeInit.java:593)
at com.android.internal.os.ZygoteInit.main (ZygoteInit.java:995)