17/11/14 Data Storage Android Mobile Programming – Prof. R. De Prisco Slide 128 Università di Salerno -‐ a.a. 2013-‐2014 • Shared Preferences – daE privaE, coppie chiave-‐valore • Internal Storage – File privaE • External Storage – File pubblici • Database SQLite – DaE struOuraE in database privaE SharedPreferences Android Mobile Programming – Prof. R. De Prisco Slide 129 Università di Salerno -‐ a.a. 2013-‐2014 • Classe SharedPreferences – permeOe di salvare e recuperare daE usando coppie di chiave-‐valore • 2 metodi della classe AcEvity – getSharedPreferences(“filename”) • quando si vogliono usare più file di “preferenze” (daE) – getPreferences() • quando basta un solo file – resEtuiscono un oggeOo SharedPreferences 1 17/11/14 SharedPreferences Android Mobile Programming – Prof. R. De Prisco Slide 130 Università di Salerno -‐ a.a. 2013-‐2014 • SharedPreferences obj; • Scrivere i daE: serve un “editor” – lo si o]ene con il metodo edit – SharedPreferences.Editor editor = obj.edit(); • Con l’editor si possono può usare “put”: – editor.putBoolean("KEY", bool_value); – editor.commit(); • Leggere i daE: is usa “get” – Boolean v = obj.getBoolean("KEY"); Internal Storage Android Mobile Programming – Prof. R. De Prisco Slide 131 Università di Salerno -‐ a.a. 2013-‐2014 • Per ogni app il sistema operaEvo prevede una directory privata – solo l’app può accedere a questa directory – se l’app viene disistallata, la directory viene cancellata • Per creare e scrivere un file 1. Chiamale openFileOutput(fileName, mode) • resEtuisce un FileOutputStream 2. Scrivere nel file (write()) 3. Chiudere lo stream (close()) 2 17/11/14 Internal Storage Android Mobile Programming – Prof. R. De Prisco Slide 132 Università di Salerno -‐ a.a. 2013-‐2014 String FILENAME = "hello_file"; String string = "hello world!"; FileOutputStream fos = openFileOutput(FILENAME, Context.MODE_PRIVATE); fos.write(string.getBytes()); fos.close(); • La modalità può essere – MODE_PRIVATE – MODE_APPEND – MADE_WORLD_READABLE – MADE_WORLD_WRITABLE Internal Storage Android Mobile Programming – Prof. R. De Prisco Slide 133 Università di Salerno -‐ a.a. 2013-‐2014 • Per leggere un file 1. Chiamale openFileInput(fileName) • resEtuisce un FileInputStream 2. Leggere dal file (read()) 3. Chiudere lo stream (close()) È possibile usare un file “staEco” meOendolo nella directory “res/raw” dell’applicazione. Lo si può leggere usando openRawResource passando come argomento l’idenEficatore R.raw.<filename>. Il metodo openRawResource resEtuisce un InputStream che può essere usato per leggere il file. 3 17/11/14 Internal Storage Android Mobile Programming – Prof. R. De Prisco Slide 134 Università di Salerno -‐ a.a. 2013-‐2014 • getFilesDir() – ResEtusice la directory privata dell’app (dove vengono salvaE i file) • getDir() – Crea (o apre se esiste) una directory all’interno dello spazio privato dell’app • deleteFile() – cancella on file nello spazio privato • filelist() – ResEtuisce un array di file, quelli presenE nello spazio privato File temporanei Android Mobile Programming – Prof. R. De Prisco Slide 135 Università di Salerno -‐ a.a. 2013-‐2014 • Per i file temporanei si può usare una directory cache – Android cancellerà i file in questa directory SE necessario (quando manca spazio) • getCacheDir() – resEtuisce la directory cache – è comunque responsabilità dell’app cancellare i file – non si dovrebbe usare la directory cache per file grandi (grandezza massima raccomandata 1MB) 4 17/11/14 External Storage Android Mobile Programming – Prof. R. De Prisco Slide 136 Università di Salerno -‐ a.a. 2013-‐2014 • Android permeOe l’uElizzo di una memoria esterna – Epicamente una SD card • File nella memoria esterna sono pubblici (world-‐ readable) • Occorre richiedere il permesso di leOura/scriOura • La memoria esterna può essere rimossa – quindi non si può assumere che i file siano sempre disponibili External Storage Android Mobile Programming – Prof. R. De Prisco Slide 137 Università di Salerno -‐ a.a. 2013-‐2014 <manifest ...> <uses-‐permission android:name="android.permission.WRITE_EXTERNAL_STORAGE” android:maxSdkVersion="18" /> … </manifest> • Permesso Write include il permesso Read <manifest ...> <uses-‐permission android:name="android.permission.READ_EXTERNAL_STORAGE” /> … </manifest> A parEre da Android 4.4, per lo spazio privato non c’è bisogno di permessi. 5 17/11/14 External Storage Android Mobile Programming – Prof. R. De Prisco Slide 138 Università di Salerno -‐ a.a. 2013-‐2014 /* Checks if external storage is available for read and write */ public boolean isExternalStorageWritable() { String state = Environment.getExternalStorageState(); if (Environment.MEDIA_MOUNTED.equals(state)) { return true; } return false; } /* Checks if external storage is available to at least read */ public boolean isExternalStorageReadable() { String state = Environment.getExternalStorageState(); if (Environment.MEDIA_MOUNTED.equals(state) || Environment.MEDIA_MOUNTED_READ_ONLY.equals(state)) { return true; } return false; } Condividere file con altre app Android Mobile Programming – Prof. R. De Prisco Slide 139 Università di Salerno -‐ a.a. 2013-‐2014 • getExternalStoragePublicDirectory(type) – type: DIRECTORY_PICTURES, DIRECTORY_MUSIC , DIRECTORY_RINGTONES, … • Esempio: metodo che crea una nuova dir per delle foto nella dir pubblica delle immagini public File getAlbumStorageDir(String albumName) { // Get the directory for the user's public pictures directory. File file = new File(Environment.getExternalStoragePublicDirectory( Environment.DIRECTORY_PICTURES), albumName); if (!file.mkdirs()) { Log.e(LOG_TAG, "Directory not created"); } return file; } 6 17/11/14 Database Android Mobile Programming – Prof. R. De Prisco Slide 140 Università di Salerno -‐ a.a. 2013-‐2014 • Android fornisce supporto per database SQL – solo all’interno dell’app • Per usare un database – Creare una soOoclasse di SQLiteOpenHelper – sovrascrivere il metodo onCreate() • Quindi si crea un nuovo Helper: – dbHelper = new DatabaseOpenHelper(this); • Dal quale si ricava un database – SQLiteDatabase db = dbHelper.getWritableDatabase(); Database Android Mobile Programming – Prof. R. De Prisco Slide 141 Università di Salerno -‐ a.a. 2013-‐2014 • Sul database si possono applicare comandi standard SQL • Tipicamente il database viene creato nel metodo onCreate() della soOoclasse DatabaseOpenHelper • Nell’app vengono usaE: – db.insert() – db.delete() – db.update() 7 17/11/14 Database Android Mobile Programming – Prof. R. De Prisco Slide 142 Università di Salerno -‐ a.a. 2013-‐2014 public class DicEonaryOpenHelper extends SQLiteOpenHelper { private staEc final int DATABASE_VERSION = 2; private staEc final String DICTIONARY_TABLE_NAME = "dicEonary"; private staEc final String DICTIONARY_TABLE_CREATE = "CREATE TABLE " + DICTIONARY_TABLE_NAME + " (" + KEY_WORD + " TEXT, " + KEY_DEFINITION + " TEXT);”; DicEonaryOpenHelper(Context context) { super(context, DATABASE_NAME, null, DATABASE_VERSION); } @Override public void onCreate(SQLiteDatabase db) { db.execSQL(DICTIONARY_TABLE_CREATE); } @Override public void onUpgarde(SQLiteDatabase db, int oldVersion, int newVersion) { // override necessario } } Data Storage Android Mobile Programming – Prof. R. De Prisco Slide 143 Università di Salerno -‐ a.a. 2013-‐2014 DataStorageIntFile DataStorage DataStoragePreferences DataStorageSQL 8
© Copyright 2024 Paperzz