Skip to content

Latest commit

 

History

History
116 lines (97 loc) · 3.26 KB

07-stockage.asc

File metadata and controls

116 lines (97 loc) · 3.26 KB

Android

Persistance

  • On a parfois besoin de stocker un état même après la fermeture de l’application

  • On veut pouvoir gérer les préférences utilisateur

  • On veut faire des requêtes sur des données persistantes

Shared Preferences

  • Utilisé surtout pour conserver les préférences utilisateur

  • Stockage transparent dans un fichier XML

  • Couples clé/valeur

Context context = getActivity();
SharedPreferences sharedPref = context.getSharedPreferences(
        [FILE_NAME], Context.MODE_PRIVATE);

Shared Preferences

  • On peut écrire dedans :

    SharedPreferences sp = getActivity().getPreferences(Context.MODE_PRIVATE);
    SharedPreferences.Editor editor = sp.edit();
    editor.putInt("saved_score", newHighScore);
    editor.commit();
  • Ou y lire :

    SharedPreferences sp = getActivity().getPreferences(Context.MODE_PRIVATE);
    int defaultValue = 12;
    long highScore = sp.getInt("saved_score", defaultValue);

Fichiers

  • Stockage dans la mémoire interne ou externe (SD)

    • Attention, la carte SD n’est pas toujours présente

  • API Java classique :

    • File

    • Input et Output Streams

  • Attention aux droits d’accès

Fichiers

  • Chaque application a son dossier privé :

    • /Android/data/<package_name>/files/

    • sous-dossiers :

      • cache

      • music

      • ringtones…​

  • Modes d’écriture : MODE_PRIVATE, MODE_APPEND, MODE_WORLD_READABLE, MODE_WORLD_WRITEABLE

String fileName = Context.getCacheDir() + FILENAME;
FileOutputStream fos = ctx.openFileOutput(fileName, Context.MODE_PRIVATE);

SQLite

  • Une base de données SQL allégée

  • API assez spécifique à base de Cursor

  • SQLiteOpenHelper

    • Cycle de vie

    • Versions de base

    • méthodes db.insert, update, delete, query et executeSQL

SQLite

public class MySQLiteDB extends SQLiteOpenHelper {
	private static final String TABLE_BOOKS = "table_books";
	private static final String COL_ID = "ID";
	private static final String COL_ISBN = "ISBN";
	private static final String COL_TITLE = "Title";
	private static final String CREATE_BDD = "CREATE TABLE " + TABLE_BOOKS + " ("
	+ COL_ID + " INTEGER PRIMARY KEY AUTOINCREMENT, " + COL_ISBN + " TEXT NOT NULL, "
	+ COL_TITLE + " TEXT NOT NULL);";
	public MaBaseSQLite(Context context, String name, CursorFactory factory, int version) {
		super(context, name, factory, version);
	}
	@Override
	public void onCreate(SQLiteDatabase db) {
		db.execSQL(CREATE_BDD);
	}
	@Override
	public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
		// Do your upgrade here
	}
}

SQLite

* On l'instancie :
[source,java]
MySQLiteDB db = new MySQLiteDB(context, NOM_BDD, null, VERSION_BDD);
SQLiteDatabase database = db.getWritableDatabase();
  • Cursor :

    Cursor c = database.query(TABLE_BOOKS, new String[] {
    	COL_ID, COL_ISBN, COL_TITLE
    }, COL_TITLE + " LIKE \"" + title +"\"", null, null, null, null);
  • Update :

    ContentValues values = new ContentValues();
    values.put(COL_ISBN, book.getIsbn());
    values.put(COL_TITLE, book.getTitre());
    return bdd.update(TABLE_BOOKS, values, COL_ID + " = " +id, null);