Introduzione alla programmazione Android - Android@tulug lezione 4

553 views
449 views

Published on

Quarta e ultima lezione del corso android tenuto presso il TuLug (Tuscia Lug) A Viterbo. Le slides sono completamente in italiano (Slides are in italian! Sorry!)

0 Comments
2 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
553
On SlideShare
0
From Embeds
0
Number of Embeds
1
Actions
Shares
0
Downloads
37
Comments
0
Likes
2
Embeds 0
No embeds

No notes for slide

Introduzione alla programmazione Android - Android@tulug lezione 4

  1. 1. Android @Tulug Lezione 4 By IvanGualandri Twitter: @Italialinux
  2. 2. Agenda ● Gestione dello storage ● SharedPreferences ● Assets ● SQLite (un occhiata veloce)
  3. 3. Riassunto ● Nelle ultime lezioni abbiamo visto, come aggiungere componenti grafici ad un applicazione, come farli interagire mediante bottoni, come utilizzare alcune funzioni specifiche del telefonino (invio/ricezione sms)
  4. 4. Introduzione allo storage
  5. 5. Introduzione allo Storage ● Android mette a disposizione diverse possibilitá per salvare informazioni persistenti sul telefonino. Le principali sono: ○ SharedPreferences ○ Assets ○ Memoria interna (dentro res) ○ SQLite
  6. 6. Introduzione allo Storage/1 ● SharedPreferences: non serve per salvare files, ma per salvare informazioni di configurazione dell'applicazione. O comunque dei dati sotto forma primitiva (numeri, stringhe, etc). ● Esempio? Se l'applicazione è la prima volta che si avvia.
  7. 7. ● Assets: Viene usato quando vogliamo salvare i files da utilizzare in maniera "grezza" dall'applicazione. ● Quali per esempio: files di testo, caratteri, brani musicali, etc. ● Se li mettessimo in /res android li proesserebbe mediante il suo resource system. Introduzione allo Storage/2
  8. 8. ● SQLite: Un vero e proprio database relazionale, quindi cosa dire di più? Si usa quando le informazioni si possono rappresentare mediante tabelle, e si vogliono fornire funzioni veloci di interrogazione, ordinamento, etc. Introduzione allo Storage/3
  9. 9. ● Memoria interna: In questo caso si sfrutta la cartella resources, e quindi il dato risiede nella cosiddetta memoria interna. Rende l'accesso dei dati da parte dell'applicazione più semplice. Il problema è che molti telefonini hanno la memoria interna molto limitata. Introduzione allo Storage/4
  10. 10. SharedPreferences...
  11. 11. ● Questa modalitá ci permette di salvare dei tipi di dato primitivo nella modalitá: chiave - valore ● Per dati primitivi intendiamo: interi, stringhe, booleani, etc. SharedPreferences
  12. 12. ● Esistono due tipi: ○ SharedPreferences: Sono informazioni disponibili per tutte le componenti dell'applicazione ○ Preferences: Sono invece disponibili solamente dalla singola activity Noi vedremo solo le shared. SharedPreferences/2
  13. 13. ● Ovviamente le due operazioni che possiamo fare sono leggere o scrivere valori. ● Per la prima basta solo l'accesso all'oggetto SharedPreferences, ● Per la seconda invece dobbiamo utilizzare: SharedPreferences.Editor SharedPreferences/3
  14. 14. ● Della creazione/accesso all'oggetto se ne occupa l'applicazione/sistema. quello che dobbiamo fare noi è fornirgli il nome che le identificherá. e la modalitá di accesso. ● MODE_PRIVATE è quella standard. SharedPreferences preferences = this. getSharedPreferences("org.italialinux. profilemanager", Context.MODE_PRIVATE); SharedPreferences/4
  15. 15. ● Con preferences a questo punto gia possiamo leggere i dati contenuti al suo interno. I metodi da usare sono: public boolean getBoolean (String key, boolean defValue); public float getFloat (String key, float defValue); public int getInt (String key, int defValue); public long getLong (String key, long defValue); public String getString (String key, String defValue); SharedPreferences/5
  16. 16. ● Tutti i metodi hanno una logica simile, prendono due argomenti: ○ key - La chiave con il quale abbiamo salvato il valore ○ defValue - Il valore da tornare nel caso non si fosse trovata la proprietá key. SharedPreferences/5
  17. 17. ● Se invece vogliamo modificarne il contenuto, ci serve l'oggetto: ○ SharedPreferences.Editor ● Ci basta chiamare il metodo edit di SharedPreferences: SharedPreferences.Editor editor = preferences.edit(); SharedPreferences/6
  18. 18. ● Come prima, per inserire dei dati abbiamo a disposizione i seguenti metodi: public SharedPreferences.Editor putBoolean (String key, boolean value) public SharedPreferences.Editor putString (String key, String value) public SharedPreferences.Editor putLong (String key, long value) Per salvare basta chiamare: SharedPreferences/7
  19. 19. ● Esercizio: ○ Fare una app android che identifica se è la prima volta che viene lanciata. ● Suggerimenti: ○ Ci basta un booleano ○ Per salvare dobbiamo usare l'editor SharedPreferences/9
  20. 20. Assets...
  21. 21. ● Con gli asset salviamo i dati su memoria esterna ● Si utilizzano quando la nostra applicazione deve salvare file che non devono essere cancellati se l'applicazione viene rimossa (foto scattate, video registrati,etc. ) Assets
  22. 22. ● Con gli asset salviamo i dati in maniera grezza. ● Si utilizzano quando vogliamo utilizzare, che non devono essere preprocessati dal resource manager, e devono essere letti così come sono. Assets
  23. 23. ● Vanno messi all'interno della cartella assets. Assets/2
  24. 24. ● La classe che ci permette di gestirli si chiama: AssetManager. ● Anche questa volta ci basta chiederla all'Activity: AssetManager manager = getAssets(); Assets/3
  25. 25. ● Per aprire un file possiamo usare il metodo open("filename"), che ci torna un InputStream (da gestire com cone qualsiasi programma java InputStream ims = assetManager.open("image. jpg"); ● Con list("foldername") otteniamo la lista dei files contenuti in una cartella String[] files = assetManager.list("Files"); Assets/4
  26. 26. SQLite...
  27. 27. ● Si tratta di un database relazionale che non necessita di un server ● Tutto risiede all'interno di un file ● L'interrogazione avviene mediante query sql. SQLite
  28. 28. ● Per utilizzare i servizi del database possiamo estendere la classe: SQLiteOpenHelper SQLite/2
  29. 29. public class DatabaseManager extends SQLiteOpenHelper { private static final String DATABASE_NAME = "expenses.db" ; private static final int DATABASE_VERSION = 1; ** Create a helper object for the Events database */ public DatabaseManager (Context ctx) { super(ctx, DATABASE_NAME, null, DATABASE_VERSION); } @Override public void onCreate(SQLiteDatabase db) { db.execSQL("CREATE TABLE expense (" + " _id INTEGER PRIMARY KEY AUTOINCREMENT, " + "dateOfExpense INTEGER, amount REAL, description TEXT NOT NULL);" ); } @Override public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { db.execSQL("DROP TABLE IF EXISTS expense"); onCreate(db); } } SQLite/3
  30. 30. ● Il metodo onCreate() - Non è quello dell'activity. ● Serve per le operazioni preliminari di creazione del database. ● Questa viene chiamata quando il database non esiste, in occasione della prima operazione di scrittura. SQLite/3
  31. 31. ● Il metodo onUpgrade() - Serve quando dobbiamo effettuare operazioni di aggiornamento del database ● Viene chiamato quando cambia il numero definito in: DATABASE_VERSION SQLite/4
  32. 32. public Expense[] findAllExpenses() { SQLiteDatabase db = getReadableDatabase(); String sql = “SELECT date_of_expense,amount,description FROM expenses ORDER BY date_of_expense”; Cursor c = db.rawQuery(sql,null); Expense [] result=new Expense [c.getCount()]; c.moveToFirst(); while (!c.isAfterLast()) { Expense expense = new Expense(c.getLong(0),c.getDouble(1), c.getString(2)); result[c.getPosition()]=expense; c.moveToNext(); } c.close(); } SQLite/5
  33. 33. ● Per accedere al database abbiamo due metodi: ○ getReadableDatabase(); Ci da accesso in sola lettura ○ getWritableDatabase(); Ci da accesso anche in scrittura ● L'oggetto tornato è un SQLiteDatabase che contiene i metodi per le query. SQLite/6
  34. 34. ● Le query possiamo eseguirle con il metodo Cursor c = rawQuery(query, null); ● Ora i risultati sono contenuti all'interno dell'oggetto cursor. ● É importante la chiamata c.moveToFirst(); Altrimenti riceverremo una NullPointerException SQLite/7
  35. 35. ● Dopo di che ci basta un ciclo while per navigare fra i risultati della query. SQLite/7

×