Vous êtes sur la page 1sur 37

Android

Somaire

Les différentes sauvegarde dans Android


Créer une base de données SQlite
Le pattern DAO
Insérer et récupérer des données
Les Threads : Exécuter une autre tâche
RecyclerView : Afficher une liste d'éléments
Les différentes sauvegardes

SaveInstanceState
Mémoire interne (tel ou sd)
Shared Preferences
SQLite
API (Firebase, Aws, server perso,...)
Types de donnés :

NULL pour les données NULL.


INTEGER pour les entiers (sans virgule).
REAL pour les nombres réels (avec virgule).
TEXT pour les chaînes de caractères.
BLOB pour les données brutes, par exemple si vous voulez
mettre une image dans votre base de données (???)
Créer la base
TodoDBHelper
TodoDBHelper
Pojo Todo

private long id;


private String name;
private String urgency;

Constructeur + getter + setter + toString


Création de la class DAO
TodoDAO
TodoDAO
TodoDAO
TodoDAO
TodoDAO
AddTodoActivity.java

En vous servant de cet exemple implémenter l’insertion en


base de données

TodoDAO todoDAO = new TodoDAO(getApplicationContext());


Todo todo = new Todo();
todo.setName(nameTodo);
todo.setUrgency(selectedSpinnerItem);
todoDAO.add(todo);
MainActivity.java (onCreate)

En vous servant de cet exemple implémenter la


récupération des TODOS en base de données
Finalisation de l’application

Implémenter l’affichage des TODOS


Si besoin corrigez le système d’Intent
Les Threads :
Exécuter une autre tâche
Problème de l'application actuelle
Synchrone vs Asynchrone
Les callbacks
Class AsyncTask
interne à MainActivity
Utilisation de l’ AsyncTask
MainActivity
AsyncTask <String, String, List<Todo>>

4 étapes, appelées OnPreExecute, doInBackground,


onProgressUpdate et onPostExecute
3 arguments :
• 1 - Params : type des paramètres fournis en entrée (une
string par exemple)
• 2- Progress : type de l'unité de progression du traitement
(pour une Progress bar par exemple - souvent à Void)
• 3 - Result : type du résultat du traitement.
RecyclerView :
Afficher une liste d'éléments
ListView VS RecyclerView

 Les eléments ne sont pas tous chargés


 Propose liste et grille

Build.gradle (Module: app) :

API 28 :
implementation 'com.android.support:recyclerview-v7:28.0.0‘

API 29 et suppérieur :
implementation 'androidx.recyclerview:recyclerview:1.1.0'
RecyclerView
Création de la vue recyclerview_main.xml
API 28:
<?xml version="1.0" encoding="utf-8"?>
<android.support.v7.widget.RecyclerView xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/rvTodo"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity">

</android.support.v7.widget.RecyclerView>

API 29:
<?xml version="1.0" encoding="utf-8"?>
<androidx.recyclerview.widget.RecyclerView
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/rvTodo"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity">

</androidx.recyclerview.widget.RecyclerView>
RecyclerView
todo_item.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:orientation="horizontal"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_margin="4dp">

<TextView
android:id="@+id/tvName"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:padding="1dp"
tools:text="Todo item" />

<TextView
android:id="@+id/tvUrgency"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:padding="1dp"
tools:text="urgency"/>
</LinearLayout>
Organisation

Item

RecyclerView
Création d’un adaptateur
Class TodoAdapter
Class TodoAdapter
Class TodoAdapter
Explication
List<Todo> todos :
 Stock la liste de Todos contenu l’adapter

TodoViewHolder
 Classe interne qui représente la vue pour un item (cf .
Todo_item.xml)

onCreateViewHolder
 Créé la view pour l’item (R.layout.todo_item)

onBindViewHolder
 Bind un todo (objet Todo) avec les élément de la view item (tvName
et tvUrgency)

getIemCount
 Retourne le nombre d’élément contenu dans la liste de l’adapter
(todos)
Problématique :
Serializable vs Parcelable
Performances
Passage d'un ArrayList dans un bundle
Exercice : rendre l'objet Todo Parcelable
http://tutos-android-france.com/passer-des-donnees-
entre-activites/
Pojo Todo
Pojo Todo
Modification de MainActivity.java
Les propriétés
onCreate
Explications

recyclerView = findViewById(R.id.rvTodo);
 On récupère le RecyclerView de la vue

RecyclerView.LayoutManager layoutManager = new


LinearLayoutManager(getApplicationContext());
 Le layout manager va pouvoir nous servir à définir que le layout est
une grille au lieu d’une liste par exemple …

recyclerView.setLayoutManager(layoutManager);
 On branche le layout manager à l’objet recyclerView

todoAdapter = new TodoAdapter(todos);


 On fabrique l’adapter et on le nourrit avec les TODOS

recyclerView.setAdapter(todoAdapter);
 On branche l’adaptater à l’objet recyclerView
Sauvegarde des données
AsynTask

Vous aimerez peut-être aussi