Čistá architektura: paginación de Android en util kotlin, biblioteca de paginación jetpack, Android KTX et coroutine. | lähde: Ayoub Hadar | Octubre de 2020

Arquitectura limpia Respeta un conjunto de principios para una aplicación estable y ejecutiva, los implementadores están decorados en Android y son más populares, y organizan consistentemente el código en tres sofás principales y una presentación para aprender l “Etiquetado e interacciones del usuario, un dominio para asegurar las métricas lógicas de las funciones de la aplicación y la cumplimentación de un dato responsable de la recogida de datos de otro tipo de fuentes (nube, ubicación, dispositivo…). základní projekt sera donc organisé sous cette forma en Respectant les Responsibilityités de Chaque Couche.

La COrutinas sont cependant introductorio par basin pour código de renderizado asynchrone natif, más lisible, mantenible y testable.

El objeto de este artículo es implementar la biblioteca de la biblioteca de paginación de Google con los conceptos básicos de esta arquitectura limpia en Android. También puede dirigir directamente el proyecto final a Github:

Habitualmente, para mostrar una lista de datos en la MVVM, en abstracción del comentario sobre los datos, es implementar el viewModel que se agrega a nuestra vista, luego implementa el adaptador para nuestro recicladorView.

Finalmente, usamos el patrón «observador» de liveData para recibir notificaciones de todos los cambios en su valor en ListFragment.

En el caso de las listas de elementos de infinis, no es posible imprimir el resultado, google el lanzamiento del libro de paginación en Androidx en mayo de 2018, que forma parte de la suite jetpack de Android. El contable proporcionará 3 tipos de fuente de datos responsables de la paginación solo cuando se use, es importante elegir la fuente de datos que se adapte a su discusión.

  • PositionalDataSource: Si es un cargador y busca un puesto de arbitraje en una lista de datos del número y el precedente (si usa una API, está preestablecido para usar ItemKeyedDataSource o PageKeyedDataSource)
  • ItemKeyedDataSource : Si tiene una discusión de las páginas para compartir el último elemento cargado.
  • PageKeyedDataSource : Si desea definir la clave de las páginas adyacentes al momento de cargar la página en el curso.

Nosotros los usamos PageKeyedDataSource inserte la implementación en la página sur des Appels web service verse API ouverte de réalisation cinématographiques: API de OMDB

La presentación de los elementos de la vista de reciclador de una lista infinita es creada por una clase que PagedListAdapter.

La clase crea dos métodos para implementar onBindViewHolder et onCreateViewHolder para obtener las celdas de nuestro recicladorView

El viewModel no contiene nada más Datos en tiempo real afin d’ervererver el cambio de su estado en Le ListFragment.

  • DataSource.Factory: Le permitimos crear y almacenar memoria en nuestra instancia de DataSource.
  • PageKeyedDataSource: te permitimos crear una instancia que implemente tres métodos (loadInitial, loadAfter, loadBefore)

Le viewModelScope para presentar con las extensiones de Android Basins.

Para view viewModel creado, se define viewModelScope. Todas las esquinas abiertas al exterior del medidor deben cancelarse en este momento o se suprime viewModel.

Vierta más información sobre las extensiones relativas de KTX.

implementation "androidx.core:core-ktx:latest_version"
implementation "androidx.lifecycle:lifecycle-livedata-ktx:latest_version"

Haciendo abstracción del caso de uso, el archivo de datos de nuestro DataSource hace una aplicación asincrónica para una «clase cerrada» que se puede utilizar para dos estados (Éxito o Fallo). Este concepto es introducido por la caldera, que utiliza el uso de intervenciones en devoluciones de llamada.

Después de la recuperación del resultado, hemos configurado los clústeres de páginas adyacentes a la carga en los parámetros de LoadCallback. Los parámetros pueden ser nulos y cero, más la página del cargador.

el resultado final de nuestro responsable del modelo de modelo de vista:

los métodos getMovies (palabra clave) cree una instancia de nuestro DataSource que esté disponible en PageKeyedDataSource. Datasource proporcionará la clave, viewModelScope y una instancia de nuestro uso.

La instancia de PagingMoviesFactory le permite convertir DataSource a Datos en tiempo real para parametrizar la configuración de paginación PagedList.Config.

PagedList.Config prendans en nuestro ejemplo de dos parámetros:

  • pageSize: el número de elementos en una página.
  • prefetchDistance: el nombre del elemento encargado de la aventura. La librería en la que se aplica el uso de la bolsa es el nombre de los elementos adjuntos en la lista es inferior 30.

Hay todos los demás parámetros para afectar el pago en Doc.

Závěr, notre usecase sera responsable de preparar la lista de datos y el resultado general de la verificación debe ser la página de la última página.

withContext (despachador: CoroutineDispatcher) luego, en un parámetro, un despachador de pasillo inyectado en el uso para definir el hilo en la costura es necesario para ejecutar nuestro código encapsulado en el interior del perímetro del corrugador. En nuestro caso, el código es un subprograma de servicio web asíncrono, que es por todo lo que IO Dispatcher tiene que realizar la solicitud sin bloquear el hilo principal. hay todos los demás tipos de despachadores que utilizan el tiempo de uso:

Le DispatcherDefecto«Está preestablecido para usar CPU importantes para ayudarlos»Despachador IC“Se utiliza para crear aplicaciones de servicios web.

Solo nuestro contenido de datos contiene los datos correspondientes clasificables en serie para los atributos JSON relacionados con el servicio web OMDB y el repositorio responsable de recuperar y mapear el retorno del servicio web:

Siga la aplicación de la aplicación de localización para hacer un administrador gratuito API OMDb. baño, Ajoutez l’api key généré sur le fichier gradle.properties afin del ácido en el valor del tuyo BuildConfig.

API_KEY="api_key_généré"

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *