Я использую пейджинг 3 для получения данных из базы данных комнаты. Проблема, с которой я столкнулся, заключается в повтAndroid

Форум для тех, кто программирует под Android
Ответить
Anonymous
 Я использую пейджинг 3 для получения данных из базы данных комнаты. Проблема, с которой я столкнулся, заключается в повт

Сообщение Anonymous »

здесь я получаю все сообщения из базы данных комнаты

Код: Выделить всё

@Query("SELECT * FROM Message WHERE roomId = :roomId ORDER BY cd DESC limit :pageSize") suspend fun getAllMessage(roomId: Long, pageSize: Int): List
вот мой PagingSource
`class MessagePagingSource(
private valchatWindowRepository: ChatWindowRepository, Private val roomId: Long) : PagingSource() {

Код: Выделить всё

override fun getRefreshKey(state: PagingState): Int? {
// We need to get the previous key (or next key if previous is null) of the page
// that was closest to the most recently accessed index.
// Anchor position is the most recently accessed index
return state.anchorPosition?.let { anchorPosition ->
state.closestPageToPosition(anchorPosition)?.prevKey?.plus(1)
?: state.closestPageToPosition(anchorPosition)?.nextKey?.minus(1)
}

}

override suspend fun load(params: LoadParams): LoadResult {
return try {
val pageNumber = params.key ?: 0
val pageSize = params.loadSize
val response = chatWindowRepository.getMessages(roomId, pageSize)

LoadResult.Page(
data = response,
prevKey = if (pageNumber > 0) pageNumber - 1 else null,
nextKey = if (response.isNotEmpty()) pageNumber + 1 else null
)
} catch (e: Exception) {
Log.e("itemSnapshotList", "Error loading data: ${e.message}", e)
LoadResult.Error(e)
}
}
}`
вот код моей модели представления

Код: Выделить всё

    val messages = Pager( config = PagingConfig(pageSize = 10, prefetchDistance = 10), pagingSourceFactory = { MessagePagingSource( chatWindowRepository, roomId = room.roomId ) }).flow.cachedIn(viewModelScope)
и, наконец, вот мой код на стороне пользовательского интерфейса
` val list = vm.messages.collectAsLazyPagingItems()

Код: Выделить всё

    Log.d("itemSnapshotList", "list size is:${list.itemCount}")

LazyColumn(
modifier = Modifier
.padding(it)
.fillMaxSize(), reverseLayout = true
) {
items(
count = list.itemCount,
key = list.itemKey { message -> message.uuid },
contentType = list.itemContentType { it.messageType },
itemContent = {index: Int ->
val message = list[index]
Log.d("itemSnapshotList", "uuid is : ${message?.uuid}")
}`
ФАТАЛЬНОЕ ИСКЛЮЧЕНИЕ: основной
Процесс: com.ainsoft.scoopmessenger, PID: 25528
java.lang .IllegalArgumentException: ключ «1-120+1=1697018154509» уже использовался. Если вы используете LazyColumn/Row, убедитесь, что вы предоставили уникальный ключ для каждого элемента.
в androidx.compose.ui.layout.LayoutNodeSubcompositionsState.subcompose(SubcomposeLayout.kt:433)
в androidx.compose .ui.layout.LayoutNodeSubcompositionsState$Scope.subcompose(SubcomposeLayout.kt:807)
at androidx.compose.foundation.lazy.layout.LazyLayoutMeasureScopeImpl.measure-0kLqBqw(LazyLayoutMeasureScope.kt:121)
at androidx .compose.foundation.lazy.LazyListMeasuredItemProvider.getAndMeasure(LazyListMeasuredItemProvider.kt:48)
в androidx.compose.foundation.lazy.LazyListMeasureKt.measureLazyList-50ZNEM8(LazyListMeasure.kt:181)
в androidx.compose .foundation.lazy.LazyListKt$rememberLazyListMeasurePolicy$1$1.invoke-0kLqBqw(LazyList.kt:322)
at androidx.compose.foundation.lazy.LazyListKt$rememberLazyListMeasurePolicy$1$1.invoke(LazyList.kt:187)
at androidx.compose.foundation.lazy.layout.LazyLayoutKt$LazyLayout$3$2$1.invoke-0kLqBqw(LazyLayout.kt:103)
at androidx.compose.foundation.lazy.layout.LazyLayoutKt$LazyLayout$3$2 $1.invoke(LazyLayout.kt:96)
в androidx.compose.ui.layout.LayoutNodeSubcompositionsState$createMeasurePolicy$1.measure-3p2s80s(SubcomposeLayout.kt:644)
в androidx.compose.ui.node .InnerNodeCoordinator.measure-BRTryo0(InnerNodeCoordinator.kt:126)
в androidx.compose.ui.graphics.SimpleGraphicsLayerModifier.measure-3p2s80s(GraphicsLayerModifier.kt:646)
в androidx.compose.ui.node .LayoutModifierNodeCoordinator.measure-BRTryo0(LayoutModifierNodeCoordinator.kt:116)
в androidx.compose.foundation.layout.FillNode.measure-3p2s80s(Size.kt:699)
в androidx.compose.ui.node .LayoutModifierNodeCoordinator.measure-BRTryo0(LayoutModifierNodeCoordinator.kt:116)
в androidx.compose.foundation.layout.PaddingValuesModifier.measure-3p2s80s(Padding.kt:455)
в androidx.compose.ui.node .LayoutModifierNodeCoordinator.measure-BRTryo0(LayoutModifierNodeCoordinator.kt:116)
в androidx.compose.ui.node.LayoutNodeLayoutDelegate$performMeasure$2.invoke(LayoutNodeLayoutDelegate.kt:1560)
в androidx.compose.ui. node.LayoutNodeLayoutDelegate$performMeasure$2.invoke(LayoutNodeLayoutDelegate.kt:1556)
в androidx.compose.runtime.snapshots.Snapshot$Companion.observe(Snapshot.kt:2303)
в androidx.compose.runtime .snapshots.SnapshotStateObserver$ObservedScopeMap.observe(SnapshotStateObserver.kt:473)
в androidx.compose.runtime.snapshots.SnapshotStateObserver.observeReads(SnapshotStateObserver.kt:230)
в androidx.compose.ui.node .OwnerSnapshotObserver.observeReads$ui_release(OwnerSnapshotObserver.kt:133)
в androidx.compose.ui.node.OwnerSnapshotObserver.observeMeasureSnapshotReads$ui_release(OwnerSnapshotObserver.kt:113)
в androidx.compose.ui. узел .LayoutNodeLayoutDelegate.performMeasure-BRTryo0(LayoutNodeLayoutDelegate.kt:1556)
at androidx.compose.ui.node.LayoutNodeLayoutDelegate.access$performMeasure-BRTryo0(LayoutNodeLayoutDelegate.kt:35)
at androidx.compose.ui .node.LayoutNodeLayoutDelegate$MeasurePassDelegate.remeasure-BRTryo0(LayoutNodeLayoutDelegate.kt:582)
at androidx.compose.ui.node.LayoutNode.remeasure-_Sx5XlM$ui_release(LayoutNode.kt:1147)
at androidx .compose.ui.node.LayoutNode.remeasure-_Sx5XlM$ui_release$default(LayoutNode.kt:1138)
at androidx.compose.ui.node.MeasureAndLayoutDelegate.doRemeasure-sdFAvZA(MeasureAndLayoutDelegate.kt:331)
at androidx.compose.ui.node.MeasureAndLayoutDelegate.remeasureAndRelayoutIfNeeded(MeasureAndLayoutDelegate.kt:466)
at androidx.compose.ui.node.MeasureAndLayoutDelegate.forceMeasureTheSubtree(MeasureAndLayoutDelegate.kt:546)
at androidx .compose.ui.node.MeasureAndLayoutDelegate.forceMeasureTheSubtree(MeasureAndLayoutDelegate.kt:554)
в androidx.compose.ui.platform.AndroidComposeView.forceMeasureTheSubtree(AndroidComposeView.android.kt:930)
в androidx.compose .ui.node.Owner.forceMeasureTheSubtree$default(Owner.kt:239)
2023-10-11 15:10:23.929 25528-25528 AndroidRuntime com.ainsoft.scoopmessenger E на androidx.compose.ui.node. LayoutNodeLayoutDelegate$MeasurePassDelegate.remeasure-BRTryo0(LayoutNodeLayoutDelegate.kt:594)

Подробнее здесь: https://stackoverflow.com/questions/772 ... s-repeatin
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Android»