Question brève :
Quelle est la bonne façon de gérer la base de données + le réseau sur la bibliothèque Paging des composants de l'architecture, en utilisant une API qui utilise la taille de la page + pour charger une nouvelle page et l'icône BoundaryCallback
classe ?
Recherche et explication
Actuellement, la classe BoundaryCallback
utilisé dans la bibliothèque de pagination des composants d'architecture, reçoit comme paramètre l'instance d'un élément de la liste sans contexte réel de l'endroit où se trouve cet élément. Cela se produit dans onItemAtFrontLoaded
y onItemAtEndLoaded
.
Mon Api est censé recevoir la page et la taille de la page pour charger le prochain morceau de données. La fonction de rappel Boundary, ajoutée dans le cadre de la construction de la liste paginée, est censée vous indiquer quand charger la page de données suivante en fonction de la distance de préextraction et de la taille de la page.
Puisque l'Api a besoin du numéro de page et de la taille de la page à fournir, je ne vois pas comment envoyer cela à l'Api en recevant simplement un des éléments de la liste comme proposé dans onItemAtFrontLoaded
y onItemAtEndLoaded
. Vérifier les exemples de google dans ce lien En effet, ils utilisent le nom du dernier élément pour obtenir le suivant, mais cela ne correspond pas à une Api avec page + taille.
Ils ont également un autre exemple avec un seul réseau qui utilise PagedKeyedDatasource
mais il n'y a pas d'exemple ou d'indice sur la façon de combiner cela avec la base de données et le BoundaryCallback.
Editar : Les seules solutions que j'ai trouvées jusqu'à présent sont de stocker la dernière page chargée sur les préférences partagées, mais cela semble être un sale tour.
Se référer à https://github.com/googlesamples/Android-architecture-components/issues/252#issuecomment-392119468 pour une contribution officielle à ce sujet.
0 votes
El real Le problème est que si vous avez de nouveaux éléments côté serveur, la page sur laquelle se trouvait chaque élément va se déplacer. Pouvez-vous mettre en cache de manière fiable un
pageIndex
-dans la base de données à long terme ?0 votes
C'est possible si les éléments sont classés par ordre chronologique (dernière page la plus récente), ou comme dans mon cas, un flux généré qui reste inchangé une fois par jour. Il existe de nombreuses applications pour lesquelles l'indexation des pages basée sur la taille + le numéro de page a du sens, et j'ai vu de nombreuses API mettant en œuvre ce modèle.
0 votes
Non, seulement celui qui figure dans le commentaire du support officiel.
0 votes
Cela dépend si la réponse de l'API fournit des méta-données, de la même façon
page
&pages
. lorsqu'il utilise des clés pour obtenir la page suivante, cela semble être optimisé pour noSQL - alors que pour SQL cela n'a pas nécessairement de sens... et en suivant la logique des commentaires de GitHub ; et si la clé devait être supprimée entre-temps ?0 votes
Avez-vous trouvé une solution à ce problème depuis lors ?