• 8 hours
  • Medium

Free online content available in this course.

course.header.alt.is_video

course.header.alt.is_certifying

Got it!

Last updated on 2/2/22

Créez un fichier sur le stockage interne

 Maintenant que nous savons correctement enregistrer du contenu sur l'espace de stockage externe, nous allons permettre à nos utilisateurs de sauvegarder leur texte sur l'espace de stockage interne de leur téléphone, afin de le protéger encore plus...

Du coup j'imagine que nous aurons encore besoin de demander la permission à l'utilisateur pour utiliser son espace de stockage interne, non ?

Eh non, même pas ! Lorsque vous sauvegardez des informations sur l'espace de stockage interne du téléphone de vos utilisateurs, vous n'avez pas besoin de leur permission car cet espace est alloué uniquement à votre application.

Ainsi, dans ce chapitre, nous allons permettre à nos utilisateurs d'enregistrer leur texte (et par conséquent le fichier tripBook.txt) dans la mémoire interne de leur téléphone : 

  • soit dans l'espace de stockage interne de l'application ;

  • soit dans le cache dédié de l'espace de stockage interne de l'application.

Mettez à jour de l'activité

Passons aux choses sérieuses ! Puisque nous avons créé dans le précédent chapitre une classe utilitaire assez généraliste, StorageUtils, nous la réutiliserons ici (mais sans la modifier, c'est tout l'intérêt !).

Mettons à jour notre activité afin d'y appeler les méthodes appropriées quand l'utilisateur cliquera sur les boutons radios dédiés au stockage dans la mémoire interne.

Extrait de TripBookActivity :

public class TripBookActivity extends AppCompatActivity {

// --------------------

// ACTIONS
 
// --------------------

private void save(){

if (this.radioButtonExternalChoice.isChecked()){

this.writeOnExternalStorage(); //Save on external storage

} else {

// 3 - Save on internal storage

this.writeOnInternalStorage();

}

}

// ----------------------------------

// UTILS - STORAGE

// ----------------------------------

private void readFromStorage(){

if (binding.tripBookActivityRadioExternal

.isChecked()){

} else {

// 2 - Read from internal storage

// INTERNAL

File directory;

if (binding.tripBookActivityRadioVolatile.isChecked()) {

// Cache

directory = getCacheDir();

} else {

// Normal

directory = getFilesDir();

}

binding.tripBookActivityEditText.setText(StorageUtils.getTextFromStorage(directory, this, FILENAME, FOLDERNAME));

}

}

// 1 - Write on internal storage

private void writeOnInternalStorage() {

File directory;

if (binding.tripBookActivityRadioVolatile.isChecked()) {

directory = getCacheDir();

} else {

directory = getFilesDir();

}

   StorageUtils.setTextInStorage(directory, this, FILENAME, FOLDERNAME, binding.tripBookActivityEditText.getText().toString());

}

}

 Explications : Nous avons rajouté une méthode (1) dédiée à l'écriture dans notre fichier sur l'espace de stockage interne,  qui sera appelée par la méthode  save  (3) quand l'utilisateur cliquera sur le bouton "Enregistrer" de la Toolbar. Nous avons également modifié (2) la méthode   readFromStorage  afin de lire le fichier depuis l'espace de stockage interne quand l'activité se lance ou quand l'utilisateur clique sur les boutons radios.

Et d'ailleurs, tout cela devrait vous rappeler quelque chose...  En effet, nous avons utilisé la même approche pour écrire et lire dans notre espace de stockage externe à travers le précédent chapitre, en appelant les méthodes   getTextFromStorage  et   setTextInStorage  , et en changeant uniquement le paramètre correspondant au répertoire racine pour correspondre à celui de l'espace de stockage interne :

  • getFilesDir()  : Cette méthode retournera le chemin d'accès (File) vers la racine de l'espace de stockage interne pour votre application.

  • getCacheDir()  : Cette méthode retournera le chemin d'accès (File) vers la racine du cache de l'espace de stockage interne de votre application.

Lancez maintenant votre application et testez l'enregistrement de texte dans l'espace de stockage interne

En cache, le chemin de stockage est /data/user/0/com.openclassrooms.savemytrip/cache/bookTrip/tripBook.txt et la méthode d'accès au répertoire racine est getCacheDir()  Sans cache, le chemin de stockage est data/user/0/com.openclassrooms.savemytrip/fil
Sauvegarde dans l'espace de stockage interne

En résumé

  • Il n’est pas obligatoire de demander à l’utilisateur la permission d’utiliser le stockage interne.

  • On peut stocker soit dans un cache soit directement dans le stockage interne.

  • On réutilise la classe StorageUtils qui est générique pour le stockage interne et externe.

Comme on vient de le voir, stocker des fichiers dans l’espace interne n’a rien de sorcier ! Mais il est parfois utile de pouvoir partager ces fichiers. C’est ce que je vous propose de voir dans le prochain chapitre !

Example of certificate of achievement
Example of certificate of achievement