Base de donnée et API

Déroulé de la séance

Nous allons suivre 2+1 tutoriels :

TP1 Room

Dans ce tutoriel nous allons apprendre à bien utiliser l'API Room pour gérer notre base de donnée, afficher la liste des mots dans notre base de donnée, et ajouter des entrées. Pour cela nous allons mettre en oeuvre plusieurs concepts :
  • Room (déjà vu).
  • LiveData.
  • Repository.
Allez à l'URL https://codelabs.developers.google .com/codelabs/android-room-with-a-view/ et suivez le tutoriel.

TP2 API

Dans ce tutoriel, nous allons apprendre à appeler une API REST en utilisant la librairie Retrofit.
Nous allons voir en détail plusieurs concepts/librairies/outils :


Pour cela nous allons nous appuyer sur le tutoriel suivant : https ://medium.com/@amtechnovation/android-architecture-component-mvvm-part-1-a2e7cff07a76
Toutefois nous allons effectuer quelques aménagements (voir page suivante).

TP2 Aménagements

Afin de générer les objets nous permettant de récupérer les informations de l'API, nous n'allons pas copier/coller tout simplement le code de la partie 2, mais nous allons l'écrire nous même, en utilisant des outils.
Voila la démarche que nous allons suivre :

  • Créer un compte (gratuit) sur le site News API : https://newsapi.org/.
  • Aller dans la section : "News sources" (en haut), puis France.
  • Copier l'URL de l'API (par exemple : http://newsapi.org/v2/top-headlines?country=fr&apiKey=API_KEY)
  • Récupérer le contenu du message (click droit, code source de la page => view-source:http://newsapi.org/v2/top-headlines?country=fr&apiKey=API_KEY (sur chrome).
  • Ouvrir le site : http://www.jsonschema2pojo.org/
  • Générer les POJO (détails page suivante).

Détail des paramètres

FAQ

Il manque plusieurs parties dans ce tutoriel :
  • La création du layout pour afficher l'item Article.
  • La création de l'adapter qui correspond.
  • L'ajout de la permission pour Internet dans le Manifest.
  • La mise à jour de API_KEY par notre clé d'API (dans la classe NewsViewModel).

Erreur

Lambda expressions are not supported at langage level 7 :
Solution :
Dans le fichier build.gradle (app), ajouter :

android {
    ...
    compileOptions {
        sourceCompatibility = '1.8'
        targetCompatibility = '1.8'
    }
}

SecurityException

Si rien ne s'affiche et que dans le logcat nous avons le message suivant :

java.lang.SecurityException: Permission denied (missing INTERNET permission?)
Alors c'est que comme l'erreur l'indique, nous avons oublié d'ajouter la permission pour accéder à internet dans le Manifest :

<manifest ...>
        <uses-permission android:name="android.permission.INTERNET" />
    <application ... >
        ...
    </application>
</manifest>

Allons plus loin

Le tutoriel : https://medium.com/@volodya .vechirko/android-repository-implementation-rxjava2-room-retrofit-59dbd4b238c4 est un mélange des deux techniques précédemment vue.