TP MVVM

De $1

Version de 05:18, 2 Mai 2024

cette version.

Revenir à liste des archives.

Voir la version actuelle

Objectifs

Créer une application Android permettant de gérer des articles de presse à partir d'un web service (https://newsapi.org/)

Fonctionnalités

  1. Récupérer une liste d’articles en ligne 
  2. Afficher les articles dans un recycler view 
  3. Afficher le détail d’un article
  4. Sauvegarder les articles dans une BDD local 
  5. Ajouter des fonctionnalités comme (like, partage, etc…)

Architecture de la solution 

create_projetc-11.png

Etape 1: Créer un nouveau module 

Ajouter un nouveau module dans le projet (news). 

Etape 2: Mettre en place les composants nécessaires respectant l'architecture ci-dessus.

Activity principal: HomeActivity 

Fragments: ArticlesFragment, ArticleDetailFragment 

Layouts: home_activity, articles_list_fragment, articlet_detail_fraggment

ViewModels: ArticlesViewModel 

Repository: ArticleRepository 

Data Source: LocalDataSource, RemoteDataSource

 

Etape 3: Activity

  • Modiier l'activité principale pour afficher le fragment ArticlesFragment par défaut. 

Etape 3: Layouts

  1. home_activity.xml doit contenir un FrameLayout dans lequel vous placerez les fragments. 
  2. articles_list_fragment.xml contient un RecyclerView 
  3. articlet_detail_fraggment contient: un Textview pour le titre, un TextView pour la description, une ImageView pour la photo de l'auteur 

Etape 3: Repository 

Modifier le Repository en y ajoutant une méthode permettant de récupérer la liste des articles via le web service 

a. Créer une data class (Article) modélisant les articles 

b. Ajouter les dépendances de Retroit 

//dependances retrofit
implementation "com.squareup.retrofit2:retrofit:2.6.2"
//dependances okhttp
implementation "com.squareup.okhttp3:okhttp:4.2.0"
//dependances gson
implementation 'com.google.code.gson:gson:2.8.5'
//dependances converter gson
implementation "com.squareup.retrofit2:converter-gson:2.5.0"

c. Créer une d'interface pour modéliser les actions du web service (contenant les actions du web service) 

interface ArticleService {
@GET("/articles")
fun getArticles(): Response<List<Article>>
}

d. Créer une instance de Retroit 

Modifier la classe RemoteDataSource 

class RemoteDataSource {
private val service: ArticleService

init {
val retrofit = Retrofit.Builder().apply {
//Ajouter un converter pour JSON
//Ici on utilise gson
addConverterFactory(GsonConverterFactory.create())
//Ajouter l'url de base du web service
baseUrl("https://newsapi.org/")
}.build()
//Créer une instance du service
service = retrofit.create(ArticleService::class.java)
}

fun getRemoteArticles(): List<Article> {
val result = service.getArticles()
return if(result.isSuccessful) {
result.body() ?: emptyList()
}else {
emptyList()
}
}
}